下面的代码是列表适配器,我只想显示满足“ 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();
}
}
});
}
}
答案 0 :(得分:2)
您不应向适配器提供未准备好的列表。在将列表提供给适配器之前,应先对其进行排序和过滤。
否则,由于元素位置不正确(即元素3无效,因此可见元素3实际上是元素4),您将“混淆”适配器。
答案 1 :(得分:0)
在将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
对象发送到适配器。