Показать только определенные элементы в повторном просмотре в соответствии с условием - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть повторный просмотр, показывающий список аудиофайлов, извлеченных из моего файла aud ios. json, размещенного на моем сервере. У меня есть класс модели с методом геттера getLanguage (), чтобы увидеть язык аудио. Я хотел бы показывать только аудио файлы предпочтения пользователей в представлении корзины. Скажем, например, если пользователь хочет только engli sh и russian, я хотел бы показать только список русских и engli sh. Как мы можем достичь этого? Прямо сейчас отображается весь список.

public class AudioAdapter extends  RecyclerView.Adapter<AudioAdapter.HomeDataHolder> {

int currentPlayingPosition = -1;

Context context;
ItemClickListener itemClickListener;

List<Output> wikiList;

public AudioAdapter(List<Output> wikiList, Context context) {
    this.wikiList = wikiList;
    this.context = context;
}



@NonNull
@Override
public HomeDataHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.audio_row_layout,viewGroup,false);
    HomeDataHolder mh = new HomeDataHolder(view);
    return mh;
}

@Override
public void onBindViewHolder(@NonNull final HomeDataHolder homeDataHolder, int i) {
    String desc = wikiList.get(i).getLanguage() + " • " + wikiList.get(i).getType();
    homeDataHolder.tvTitle.setText(wikiList.get(i).getTitle());
    homeDataHolder.tvotherinfo.setText(desc);
    homeDataHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (itemClickListener != null)
                itemClickListener.onClick(view,homeDataHolder.getAdapterPosition());
        }
    });


    homeDataHolder.rippleLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (itemClickListener != null)
                itemClickListener.onClick(view,homeDataHolder.getAdapterPosition());
        }
    });



}

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

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

@Override
public int getItemViewType(int position) {
    return position;
}

public void setClickListener(ItemClickListener itemClickListener) {    //  Method for setting clicklistner interface
    this.itemClickListener = itemClickListener;

}

public class HomeDataHolder extends RecyclerView.ViewHolder {

    TextView tvTitle,tvotherinfo;
    MaterialRippleLayout rippleLayout;

    public HomeDataHolder(View v) {
        super(v);
        this.tvTitle = v.findViewById(R.id.title);
        this.tvotherinfo = v.findViewById(R.id.audioDesc);
        this.rippleLayout = v.findViewById(R.id.ripple);
    }

  }

}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Вместо передачи wikiList как есть, отфильтруйте его и отправьте:

Допустим, вы заполнили wikiList, прежде чем передать его адаптер, отфильтруйте его так:

В упражнении, которое вы инициализируете adapter in:

public class YourActivity extends ............{


........
........

//your filled list
private List<Output> wikiList;

//filtered list
private List<Output> filteredList= new ArrayList<Output>();

//filters
private List<String> filters = new ArrayList<String>();


//lets say the user chooses the languages "english" and "russian" after a button click or anything (you can add as many as you want)

filters.add("english");
filters.add("russian");


//now filter the original list

for(int i = 0 ; i<wikiList.size() ; i++){

Output item = wikiList.get(i);

if(filters.contains(item.getLanguage())){

filteredList.add(item);

}


}

//now create your adapter and pass the filteredList instead of the wikiList


AudioAdapter adapter = new AudioAdapter(filteredList , this);


//set the adapter to your recyclerview........
......
.....
......


}

Я использую выше "english" и "russian" для языка. Я не знаю, как они установлены в вашем ответе, возможно, вы используете "en" для "english", поэтому будьте осторожны.

0 голосов
/ 29 апреля 2020

Общая идея для этого должна быть такой:

  1. у вас есть один список со всеми элементами
  2. у вас есть правила фильтрации, выбранные пользователем
  3. Вы фильтруете элементы из числа 1, чтобы увидеть, какие из них соответствуют ограничениям, и сохранить это в другом списке.

Тогда представление перерабатывающего предприятия показывает только элементы списка из числа 3.

Это означает, что getItemCount в этом представлении утилизатора возвращает размер отфильтрованного списка, а не весь список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...