检查 ListView 中的列表项 Android

Check list item in ListView Android

我已经使用BaseAdapter成功将物品放入ListView,我想问的是...是否可以检查ListView是否为空[=16] =],或者获取 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);
            }
        }

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

listContact.size ()

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

int number_of_element_in_listview = customAdapter.getCount();

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

is there possible to check listview is Empty in oncreate?

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

创建适配器对象之前,您应该在 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);
    }
}

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

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

试试下面的代码:-

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
            }
  }

}