【问题标题】:How to display data in specific conditions using recyclerview in Andriod?如何在Android中使用recyclerview在特定条件下显示数据?
【发布时间】:2019-06-14 16:45:49
【问题描述】:

下面的代码是列表适配器,我想只显示满足“isActive”=true条件的数据,并按年龄对数据进行排序。 我试图检查和过滤 onBindViewHolder 上的数据,但它只会阻止数据插入,列表仍保留在回收站视图中。

@Override
    public void onBindViewHolder(DeveloperViewHolder holder, int position) {
        ListItem currentItem = DeveloperList.get(position);

        String name = currentItem.getName();
        String phone = currentItem.getPhone();
        String isActive = currentItem.getIsActive();
        holder.check=isActive;


        if(isActive.equals("true")) {
            holder.txtname.setText(name);
            holder.txtphone.setText(phone);
        }

    }

    @Override
    public int getItemCount() {
        return DeveloperList.size();
    }

    public class DeveloperViewHolder extends RecyclerView.ViewHolder{
        public TextView txtname;
        public TextView txtphone;
        public String check;

        public DeveloperViewHolder(View itemView) {
            super(itemView);

            txtname = itemView.findViewById(R.id.developername1);
            txtphone = itemView.findViewById(R.id.developernumber1);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = getAdapterPosition();
                    if (pos != RecyclerView.NO_POSITION) {
                        ListItem clickItem = DeveloperList.get(pos);
                        Intent intent = new Intent(mContext, DetailActivity.class);
                        intent.putExtra("balance", clickItem.getBalance());
                        intent.putExtra("picture", clickItem.getPicture());
                        intent.putExtra("age", clickItem.getAge());
                        intent.putExtra("name", clickItem.getName());
                        intent.putExtra("gender", clickItem.getGender());
                        intent.putExtra("phone", clickItem.getPhone());
                        intent.putExtra("address", clickItem.getAddress());
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        mContext.startActivity(intent);
                        Toast.makeText(v.getContext(), "clicked" + clickItem.getName(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }


    }

【问题讨论】:

  • 在 onBind() 的条件中添加一个 else。 if(isActive.equals("true")) // 设置值 else 设置为空

标签: java android android-recyclerview adapter


【解决方案1】:

您不应该给适配器一个未准备好的列表。在将列表提供给适配器之前,您应该对列表进行排序和过滤。

否则,您将“混淆”适配器,因为元素位置将不正确(即元素 3 未激活,因此可见元素 3 实际上是元素 4)。

【讨论】:

    【解决方案2】:

    在将 developerList 发送到适配器类之前对其进行排序

    首先,创建一个Comparator 类进行排序

    class SortbyAge implements Comparator<ListItem> 
    { 
        // Used for sorting in ascending order of age
        public int compare(ListItem a, ListItem b) 
        { 
            return a.getAge() - b.getAge(); 
        } 
    } 
    

    然后在发送到适配器之前编写此代码。

    Collections.sort(developerList , new SortbyAge()); 
    ArrayList<ListItem> developers = new ArrayList();
    for(ListItem item : developerList) {
     if(item.getIsActive().equalsIgnoreCase("true")) {
       developers.add(item);
     }
    }
    

    现在只需将developers 对象发送到适配器。

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 2019-01-23
      相关资源
      最近更新 更多