У меня возникают трудности с возвратом правильных представлений, когда я использую свой поисковый вид моего повторного просмотра.
Я надуваю правильное представление, когда использую только переработчик при щелчке элемента, однако, как только я выполняю поиск и появляются результаты, неправильное представление надувается.
Я полагаю, что это из-за того, что я использовал position
, это не лучший способ сохранить исходные позиции рециркулятора при использовании поиска.
Я видел, что getAdapterPosition()
- это лучший способ сохранить позицию элемента с помощью поиска.
Если кто-нибудь может помочь мне реализовать лучший способ поддержания того, что становится завышенным после поиска, я был бы очень признателен! Я также приведу пример после кода для конкретного сценария.
Также, для пояснения, я раздуваю представления из RecyclerAdapter в методе адаптера onBindViewHolder .
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
private List<Data> listData = new ArrayList<Data>();
private Context context;
Dialog myDialog;
public RecyclerViewAdapter(List<Data> listData, Context context) {
this.listData = listData;
this.context = context;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.item,parent,false);
return new RecyclerViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
holder.itemz.setImageResource(listData.get(position).getitemz());
holder.itemName.setText(listData.get(position).getitemName());
holder.itemPrice.setText(listData.get(position).getitemPrice());
holder.itemVal.setText(listData.get(position).getitemVal());
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position) {
final SwipeDismissDialog swipeDismissDialog;
Button btnOK;
if (position == 0) {
myDialog = new Dialog(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.item_cards, null);
swipeDismissDialog = new SwipeDismissDialog.Builder(myDialog.getContext()).setView(itemView).build().show();
TextView words = (TextView)itemView.findViewById(R.id.words);
words.setText("Success1");
btnOK = (Button)itemView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
swipeDismissDialog.dismiss();
}
}
);
}
else if (position == 1){
myDialog = new Dialog(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.item_cards, null);
swipeDismissDialog = new SwipeDismissDialog.Builder(myDialog.getContext()).setView(itemView).build().show();
TextView words = (TextView)itemView.findViewById(R.id.words);
words.setText("Success2");
btnOK = (Button)itemView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
swipeDismissDialog.dismiss();
}
}
);
}
}
});
}
@Override
public int getItemCount() {
return listData.size();
}
public void filterList(ArrayList<Data> filteredList){
listData = filteredList;
notifyDataSetChanged();
}
}
Что происходит:
- Когда я загружаю упражнение и нажимаю на элемент 1 в утилите, содержимое
success1
выглядит как положено.
- Когда я выполняю поиск для
item2
, элемент возвращается, как и ожидалось, однако, если я нажимаю на элемент, вместо success2
появляется success1
.
Что может быть лучшим решением для этого?
Буду признателен за любую помощь!