【问题标题】:How to check whether the ListView is empty or not using custom list adapter如何使用自定义列表适配器检查 ListView 是否为空
【发布时间】:2016-06-16 12:07:28
【问题描述】:

我在我的应用程序中使用了两个适配器,一个用于离线模式,它从本地 sqlite DB 获取数据。第二个适配器从服务器获取数据并显示列表视图中的项目,这对于两个适配器都是通用的。在列表中没有数据时,我使用空视图来显示列表为空。但即使 sqlite 中有数据,它仍然显示列表为空。我想知道有没有办法检查适配器是否为空。如果它不为 null,则意味着它应该显示列表中的值。

离线适配器:

public class ImageListAdapter extends BaseAdapter {
    Context context;
    ArrayList<ImagelistItems> imageList;

    public ImageListAdapter(Context context, ArrayList<ImagelistItems> list) {

        this.context = context;
        imageList = list;
    }


    @Override
    public int getCount() {

        return imageList.size();
    }

    @Override
    public Object getItem(int position) {

        return imageList.get(position);
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup arg2) {
        ImagelistItems imagelistItems = imageList.get(position);

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.imagelist_items, null);

        }
        byte[] outImage = imagelistItems.getImage();
        ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
        final Bitmap theImage = BitmapFactory.decodeStream(imageStream);
        ImageView img = (ImageView) convertView.findViewById(R.id.imgview);
        img.setImageBitmap(theImage);
        final TextView merchname = (TextView) convertView.findViewById(R.id.lsmerchantname);
        merchname.setText(imagelistItems.getMerchantname());
        final TextView paid = (TextView) convertView.findViewById(R.id.lspaiddate);
        paid.setText(imagelistItems.getPaidon());
        TextView status = (TextView) convertView.findViewById(R.id.lsstatus);
        status.setText(imagelistItems.getStatus());
        final TextView amt = (TextView) convertView.findViewById(R.id.lsamount);
        amt.setText(imagelistItems.getAmount());
        ImageButton oofbutton = (ImageButton) convertView.findViewById(R.id.btnofflinebutton);
        oofbutton.setVisibility(View.INVISIBLE);
        final TextView category = (TextView) convertView.findViewById(R.id.lscategory);
        category.setText(imagelistItems.getCategory());
        final TextView paymode = (TextView) convertView.findViewById(R.id.lspaidwith);
        paymode.setText(imagelistItems.getPaymmode());
        final TextView comment = (TextView) convertView.findViewById(R.id.lscomment);
        comment.setText(imagelistItems.getComment());
        final TextView moneydet = (TextView) convertView.findViewById(R.id.moneydetails);
        final String moen;
        CurrenctSession currenctSession = new CurrenctSession(context);
        if (currenctSession.isLoggedIn()) {
            HashMap<String, String> cur = currenctSession.getUserDetails();
            moen = cur.get(currenctSession.KEY_CURRENCY);
            moneydet.setText(moen);
        } else {
            moneydet.setVisibility(View.INVISIBLE);
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String am = amt.getText().toString();
                if (am.contains("km") | am.contains("m")) {
                    Intent i = new Intent(context, MapsDetailPage.class);
                    i.putExtra("distance", amt.getText().toString());
                    i.putExtra("origin", merchname.getText().toString());
                    i.putExtra("dest", paymode.getText().toString());
                    i.putExtra("catg", category.getText().toString());
                    i.putExtra("pdate", paid.getText().toString());
                    i.putExtra("comm", comment.getText().toString());
                    context.startActivity(i);
                } else {
                    Intent i = new Intent(context, DetailsPage.class);
                    i.putExtra("bitmap", theImage);
                    i.putExtra("amount", amt.getText().toString());
                    i.putExtra("mername", merchname.getText().toString());
                    i.putExtra("paidon", paid.getText().toString());
                    i.putExtra("catg", category.getText().toString());
                    i.putExtra("paym", paymode.getText().toString());
                    i.putExtra("comm", comment.getText().toString());
                    context.startActivity(i);
                }

            }
        });
        return convertView;

    }
}

在线适配器:

public class CustomlistJsonadapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater inflater;
    private List<ReceiptMov> movieItems;


    public CustomlistJsonadapter(Activity activity, List<ReceiptMov> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }

    @Override
    public int getCount() {
        return movieItems.size();
    }

    @Override
    public Object getItem(int location) {
        return movieItems.get(location);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.onlineimagelist_items, null);

        final TextView merchantname = (TextView) convertView.findViewById(R.id.olsmerchantname);
        final TextView paiddate = (TextView) convertView.findViewById(R.id.olspaiddate);
        final TextView amounts = (TextView) convertView.findViewById(R.id.olsamount);
        final TextView paidwith = (TextView) convertView.findViewById(R.id.olspaidwith);
        final TextView categ = (TextView) convertView.findViewById(R.id.olscategory);
        final TextView comment = (TextView) convertView.findViewById(R.id.olscomment);
        final TextView stast = (TextView) convertView.findViewById(R.id.olsstatus);

        ImageView imgview = (ImageView) convertView.findViewById(R.id.oimgview);
        ReceiptMov m = movieItems.get(position);


        // Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
        byte[] s = m.getMimage();
        ByteArrayInputStream imageStream = new ByteArrayInputStream(s);
        final Bitmap theImage = BitmapFactory.decodeStream(imageStream);
        // Bitmap bm = BitmapFactory.decodeByteArray(s, 0 ,s.length);

        imgview.setImageBitmap(theImage);
        merchantname.setText(m.getMerchantname());
        paiddate.setText("Paid on:" + m.getMerdate());
        amounts.setText(m.getMeramount());
        paidwith.setText(m.getMerpaid());
        categ.setText(m.getMercategory());
        comment.setText(m.getMecomment());
        stast.setText("Status: " + "Uploaded");
        final TextView moneydet = (TextView) convertView.findViewById(R.id.omoneydetails);
        final String moen;
        CurrenctSession currenctSession = new CurrenctSession(activity);
        if (currenctSession.isLoggedIn()) {
            HashMap<String, String> cur = currenctSession.getUserDetails();
            moen = cur.get(currenctSession.KEY_CURRENCY);
            moneydet.setText(moen);
        } else {
            moneydet.setVisibility(View.INVISIBLE);
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String am = amounts.getText().toString();
                if (am.contains("km") | am.contains("m")) {
                    Intent i = new Intent(activity, MapsDetailPage.class);
                    i.putExtra("distance", amounts.getText().toString());
                    i.putExtra("origin", merchantname.getText().toString());
                    i.putExtra("dest", paidwith.getText().toString());
                    i.putExtra("catg", categ.getText().toString());
                    i.putExtra("pdate", paiddate.getText().toString());
                    i.putExtra("comm", comment.getText().toString());
                    activity.startActivity(i);
                } else {
                    Intent i = new Intent(activity, DetailsPage.class);
                    i.putExtra("bitmap", theImage);
                    i.putExtra("amount", amounts.getText().toString());
                    i.putExtra("mername", merchantname.getText().toString());
                    i.putExtra("paidon", paiddate.getText().toString());
                    i.putExtra("catg", categ.getText().toString());
                    i.putExtra("paym", paidwith.getText().toString());
                    i.putExtra("comm", comment.getText().toString());
                    activity.startActivity(i);
                }

            }
        });

        return convertView;
    }
}

列表:

if(imageListAdapter!=null){
        DatabaseHandler db = new DatabaseHandler(getApplicationContext());

        // Spinner Drop down elements
        //  List<String> lables = db.getAllLabels();
        ArrayList<ImagelistItems> list = new ArrayList<ImagelistItems>();
        list = db.getAllLabels();
        imageListAdapter = new ImageListAdapter(
                ListMode.this, list);
        if (loginSession.isLoggedIn()) {
            loginSession.checkLogin();
            listView.setAdapter(imageListAdapter);
           // listView.setEmptyView(findViewById(R.id.empty));

            Toast.makeText(getApplicationContext(), db.getSyncStatus(), Toast.LENGTH_LONG).show();
        } else {
            Intent i = new Intent(ListMode.this, LoginPAge.class);
            startActivity(i);
            ListMode.this.finish();
        }

    }else{
        listView.setEmptyView(findViewById(R.id.empty));
    }

【问题讨论】:

  • 在这一行之后添加 imageListAdapter.notifydatasetChanged() listView.setAdapter(imageListAdapter);
  • 我已经添加了,但它仍然显示列表空视图
  • 你确定你的 imageListAdapter 不为空吗?
  • 是的,它不为空

标签: java android sqlite listview baseadapter


【解决方案1】:
if (adapter!=null) {
    if (adapter.getCount() > 0) {
        // listView not empty
    } else {
        // listView  empty
    }
}

【讨论】:

    【解决方案2】:

    使用getcount()了解物品数量

    if(adapter.getCount()>0)
    {
    //some rows of listview
    }
    else
    {
    //listview is empty
    }
    

    希望对你有帮助谢谢

    【讨论】:

    • 它给了我以下错误:原因:java.lang.NullPointerException:尝试在 nidhinkumar.reccs 的空对象引用上调用虚拟方法 'int nidhinkumar.reccs.ImageListAdapter.getCount()' .ListMode.onCreate(ListMode.java:197)
    • @rick 在创建适配器对象后使用它
    • 对不起,我没听懂你能解释一下吗
    • 不,它不起作用 java.lang.NullPointerException: Attempt to get length of null array
    • @nick 请发帖,只有我可以描述更多
    【解决方案3】:

    只需在列表视图上设置adapter 之前设置emptyView。 无需检查适配器是否为空,listview 会处理。

    你的代码应该是这样的:

    TextView empty = (TextView) findViewById(android.R.id.empty);
    listView.setEmptyView(empty);
    listView.setAdapter(adapter);
    

    【讨论】:

    • 我应该将 textView 放在 Xml 的什么位置?
    【解决方案4】:

    以下代码对我有用:

    list_view.setAdapter(adapter);
    if (adapter.getCount() > 0) {
    
    } else {
      Toast.makeText(getApplicationContext(), "NO Data Available..", Toast.LENGTH_SHORT).show();
    }
    

    【讨论】:

      【解决方案5】:
       if(mAdapter.getItemCount()==0)
                  {
                      Toast.makeText(UpdatePorder.this, "list is filled", Toast.LENGTH_SHORT).show();
                  }
                  else
                  {
                     Toast.makeText(UpdatePorder.this, "List is empty", Toast.LENGTH_SHORT).show();
                  }
      

      【讨论】:

        【解决方案6】:

        试试这个,可能对你有帮助

            ImageListAdapter imageListAdapter= new ImageListAdapter();
            listviewObject.setAdapter(imageListAdapter);
        
            if (imageListAdapter!= null)
                if (imageListAdapter.getCount() > 0){
                    // implement your work
                }else {
                    // do whatever you want on empty list adapter 
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-01
          • 2014-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多