Как отобразить данные в определенных условиях, используя утилиту просмотра в Andriod? - PullRequest
0 голосов
/ 14 июня 2019

Код ниже представляет собой список адаптеров, я хочу отображать только те данные, которые удовлетворяют условиям, в которых «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();
                    }
                }
            });
        }


    }

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Не следует давать адаптеру неподготовленный список. Вы должны отсортировать и отфильтровать список, прежде чем передать его адаптеру.

В противном случае вы «перепутаете» адаптер, поскольку положения элементов не будут правильными (т. Е. Элемент 3 не активен, поэтому видимый элемент 3 фактически является элементом 4).

0 голосов
/ 14 июня 2019

Сортируйте 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 на адаптер.

...