【问题标题】:Check list item in ListView Android在 ListView Android 中检查列表项
【发布时间】:2016-04-28 03:55:10
【问题描述】:

我已经使用BaseAdapter成功地将项目放入ListView,我想问的是...是否可以检查onCreate()中的ListView是否为空,或者获取列表总数onCreate()?谢谢。

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;


public class CustomAdapter extends BaseAdapter {
    Context context;
    ArrayList<Contact> list;
    private static LayoutInflater inflater;

    public CustomAdapter(Context context,ArrayList<Contact> list){
        this.context = context;
        this.list = list;
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(inflater == null)
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(convertView == null)
            convertView = inflater.inflate(R.layout.list_contact,null);
        TextView id = (TextView) convertView.findViewById(R.id.id_keranjang);
        TextView name = (TextView) convertView.findViewById(R.id.name);
        TextView address = (TextView) convertView.findViewById(R.id.contact);

        int contact_id = list.get(position).getId();
        String contact_name = list.get(position).getName();
        String contact_address = list.get(position).getAddress();

        id.setText(String.valueOf(contact_id));
        kode.setText(contact_name);
        judul.setText(contact_address);

        return convertView;
    }
}

主活动

public class MainActivity extends AppCompatActivity {
        private static final String URL = "http://domain/contact.php";
        CustomAdapter customAdapter;
        int success = 0;
        JSONParser jsonParser = new JSONParser();
        ArrayList<Contact> listContact = new ArrayList<Contact>();
        JSONObject json=null;
        JSONArray contact=null;ListView li;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            li = (ListView) findViewById(R.id.listView);

            new getContactAsync().execute();

            //int c = li.getAdapter().getCount(); not working

        }
    class getContactAsync extends AsyncTask<String,String,ArrayList<Contact>>{


            @Override
            protected ArrayList doInBackground(String... params) {
                    json = jsonParser.getFromURL(URL);
                try {
                    contact = json.getJSONArray("contact");
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        for (int i = 0; i < contact.length(); i++) {
                            JSONObject c = contact.getJSONObject(i);
                            Contact a = new Contact();
                            a.setId(c.optInt(TAG_ID));
                            a.setName(c.optString(TAG_NAME));
                            a.setAddress(c.optString(TAG_ADDRESS));
                            listContact.add(a);
                        }
                    }
                } catch (JSONException e) {
                    Log.d("ERROR", e.toString());
                }
                return listContact;
            }

            @Override
            protected void onPostExecute(ArrayList<Contact> s) {
                super.onPostExecute(s);
                customAdapter = new CustomAdapter(MainActivity.this,listContact);
                li.setAdapter(customAdapter);
            }
        }

【问题讨论】:

    标签: android listview android-asynctask baseadapter


    【解决方案1】:

    试试下面的代码:-

    public class MainActivity extends AppCompatActivity {
            private static final String URL = "http://domain/contact.php";
            CustomAdapter customAdapter;
            int success = 0;
            JSONParser jsonParser = new JSONParser();
            ArrayList<Contact> listContact = new ArrayList<Contact>();
            JSONObject json=null;
            JSONArray contact=null;ListView li;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                li = (ListView) findViewById(R.id.listView);
    
                new getContactAsync().execute();
    
                //int c = li.getAdapter().getCount(); not working
    
            }
        class getContactAsync extends AsyncTask<String,String,ArrayList<Contact>>{
    
    
                @Override
                protected ArrayList doInBackground(String... params) {
                        json = jsonParser.getFromURL(URL);
                    try {
                        contact = json.getJSONArray("contact");
                        success = json.getInt(TAG_SUCCESS);
                        if (success == 1) {
                            for (int i = 0; i < contact.length(); i++) {
                                JSONObject c = contact.getJSONObject(i);
                                Contact a = new Contact();
                                a.setId(c.optInt(TAG_ID));
                                a.setName(c.optString(TAG_NAME));
                                a.setAddress(c.optString(TAG_ADDRESS));
                                listContact.add(a);
                            }
                        }
                    } catch (JSONException e) {
                        Log.d("ERROR", e.toString());
                    }
                    return listContact;
                }
    
                @Override
                protected void onPostExecute(ArrayList<Contact> s) {
                super.onPostExecute(s);
    
                if(listContact.size()>0)
                {
                  customAdapter = new CustomAdapter(MainActivity.this,listContact);
                  li.setAdapter(customAdapter);
                }
                else
                {
                //empty
                }
      }
    

    }

    【讨论】:

      【解决方案2】:

      在您的活动中,您有 listContact,请务必获取它的大小,因为这是您传递给适配器的内容

      listContact.size ()
      

      【讨论】:

        【解决方案3】:

        您可以简单地使用自己的 BaseAdapter 方法getCount()

        int number_of_element_in_listview = customAdapter.getCount();
        

        但是您应该在初始化变量 customAdapter 并在 AsyncTask getContactAsync 中为它分配值之后执行此操作。

        是否可以在 oncreate 中检查 listview 是否为空?

        如果 number_of_element_in_listview 的值为 0,则列表视图将没有元素。

        【讨论】:

          【解决方案4】:

          您应该在创建适配器对象之前在onPostExecute 中检查它,而不是在onCreate 中检查它。

          @Override
          protected void onPostExecute(ArrayList<Contact> s) {
              super.onPostExecute(s);
              if(listContact.size()>0){
                 customAdapter = new CustomAdapter(MainActivity.this,listContact);
                 li.setAdapter(customAdapter);
              }
          }
          

          这只会在您的列表有项目时创建适配器对象。如果为空则不会创建适配器对象。

          现在每当你引用适配器时,你应该在以后执行任何操作之前检查它是否为空。

          【讨论】:

            猜你喜欢
            • 2014-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多