android - 当我在单击视图侦听器上使用时,未显示 Android 列表视图
问题描述
我想在我的列表视图中添加单击侦听器。但是当我添加点击监听器以启动一个新的 Intent 时,列表视图消失了。
我添加了 list view.setonItemclicklistener 并失败了。
显现
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fi.com.cgulf" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".SplashActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DisplayActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"/>
<activity android:name=".DetailsActivity"
android:theme="@style/AppTheme.NoActionBar"/>
<activity android:name=".HomeActivity"
android:theme="@style/AppTheme.NoActionBar"/>
</application>
</manifest>
HomeActivity.java
package fi.com.cgulf;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import fi.com.cgulf.adapter.MyArrayAdapter;
import fi.com.cgulf.model.MyDataModel;
import fi.com.cgulf.parser.JSONParser;
import fi.com.cgulf.utils.InternetConnection;
import fi.com.cgulf.utils.Keys;
public class HomeActivity extends AppCompatActivity {
public ListView listView;
public ArrayList<MyDataModel> list;
public MyArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ImageButton img1= (ImageButton)findViewById(R.id.imageButton);
ImageButton img2= (ImageButton)findViewById(R.id.imageButton2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
list = new ArrayList<>();
if (InternetConnection.checkConnection(getApplicationContext())) {
new GetDataTask().execute();
} else {
}
}
public void onClickb1(View view)
{
Intent homeIntent =new Intent(HomeActivity.this,DisplayActivity.class);
startActivity(homeIntent);
finish();
}
public void onClickb2(View view)
{
Intent homeIntent =new Intent(HomeActivity.this,DisplayActivity.class);
startActivity(homeIntent);
finish();
}
class GetDataTask extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog;
int jIndex;
int x;
@Override
protected void onPreExecute() {
super.onPreExecute();
x=list.size();
if(x==0)
jIndex=0;
else
jIndex=x;
dialog = new ProgressDialog(HomeActivity.this);
dialog.setTitle("Please wait..");
dialog.setMessage("Loading Data");
dialog.show();
}
@Nullable
@Override
protected Void doInBackground(Void... params) {
/**
* Getting JSON Object from Web Using okHttp
*/
JSONObject jsonObject = JSONParser.getDataFromWeb();
try {
/**
* Check Whether Its NULL???
*/
if (jsonObject != null) {
/**
* Check Length...
*/
if(jsonObject.length() > 0) {
/**
* Getting Array named "contacts" From MAIN Json Object
*/
JSONArray array = jsonObject.getJSONArray(Keys.KEY_CONTACTS);
/**
* Check Length of Array...
*/
int lenArray = array.length();
if(lenArray > 0) {
for( ; jIndex < lenArray; jIndex++) {
/**
* Creating Every time New Object
* and
* Adding into List
*/
MyDataModel model = new MyDataModel();
/**
* Getting Inner Object from contacts array...
* and
* From that We will get Name of that Contact
*
*/
JSONObject innerObject = array.getJSONObject(jIndex);
String name = innerObject.getString(Keys.KEY_NAME);
String country = innerObject.getString(Keys.KEY_COUNTRY);
/**
* Getting Object from Object "phone"
*/
//JSONObject phoneObject = innerObject.getJSONObject(Keys.KEY_PHONE);
//String phone = phoneObject.getString(Keys.KEY_MOBILE);
model.setName(name);
model.setCountry(country);
/**
* Adding name and phone concatenation in List...
*/
list.add(model);
}
}
}
} else {
}
} catch (JSONException je) {
Log.i(JSONParser.TAG, "" + je.getLocalizedMessage());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
/**
* Checking if List size if more than zero then
* Update ListView
*/
}
}
}
MyArrayAdapter.java
package fi.com.cgulf.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.view.menu.MenuView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.List;
import fi.com.cgulf.R;
import fi.com.cgulf.model.MyDataModel;
public class MyArrayAdapter extends ArrayAdapter<MyDataModel> {
List<MyDataModel> modelList;
Context context;
private LayoutInflater mInflater;
// Constructors
public MyArrayAdapter(Context context, List<MyDataModel> objects) {
super(context, 0, objects);
this.context = context;
this.mInflater = LayoutInflater.from(context);
modelList = objects;
}
@Override
public MyDataModel getItem(int position) {
return modelList.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.activitysection, parent, false);
vh = ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
MyDataModel item = getItem(position);
vh.textViewName.setText(item.getName());
vh.textViewCountry.setText(item.getCountry());
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final TextView textViewName;
public final TextView textViewCountry;
private ViewHolder(RelativeLayout rootView, TextView textViewName, TextView textViewCountry) {
this.rootView = rootView;
this.textViewName = textViewName;
this.textViewCountry = textViewCountry;
}
public static ViewHolder create(RelativeLayout rootView) {
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewCountry = (TextView) rootView.findViewById(R.id.textViewCountry);
return new ViewHolder(rootView, textViewName, textViewCountry);
}
}
}
显示活动.java
package fi.com.cgulf;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import fi.com.cgulf.adapter.MyArrayAdapter;
import fi.com.cgulf.model.MyDataModel;
public class DisplayActivity extends HomeActivity {
public static ArrayList<MyDataModel> list1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list1=list;
listView = (ListView) findViewById(R.id.listView);
adapter = new MyArrayAdapter(this, list1);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Intent intent = new Intent(DisplayActivity.this, DetailsActivity.class);
intent.putExtra("pos", position);
startActivity(intent);
finish();
}
});
}
}
起初没有 onitem 点击监听器,显示列表视图没有任何问题。后来,当我将带有意图的单击选项添加到另一个活动时,列表视图已经消失了。
解决方案
首先,您应该阅读有关Android back stack的信息。
在你点击你开始的项目DetailsActivity
之后你就完成了DisplayActivity
,所以当你打开DetailsActivity
并点击返回时,你会回到之前的活动DisplayActivity
。
推荐阅读
- google-cloud-platform - Terraform:引用了未知模块
- javascript - 如何将数据选项附加到 niceSelect() jquery?如果我使用 niceselect,该代码将不起作用
- networking - 如何与主机共享访客虚拟机的 VPN 连接
- java - 如何限制对 Spring Data Rest 中子链接的访问?
- python - 将字典的长度修改为确定的值并保留具有最高值的键
- react-native - React Native:在 React Native 日历的标题中添加一个图标
- html - 如何在图像图标处设置鼠标效果
- c++ - 如何理解对象已被破坏?
- wordpress - 向所有博客页面添加操作
- android - Xamarin:如何在 OnPageFinished 中引用 ScrollView?