首页 > 解决方案 > 当我在单击视图侦听器上使用时,未显示 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

解决方案


首先,您应该阅读有关Android back stack的信息。
在你点击你开始的项目DetailsActivity之后你就完成了DisplayActivity,所以当你打开DetailsActivity并点击返回时,你会回到之前的活动DisplayActivity


推荐阅读