【发布时间】:2018-10-08 20:59:48
【问题描述】:
使用我的 recyclerview 的搜索视图后,我很难返回正确的视图。
当我在项目点击时仅使用回收器时,我会放大正确的视图,但是,一旦我进行搜索并出现结果,错误的视图就会被放大。
我相信这是因为我使用 position 并不是在使用 searchview 时保持原始 recyclerview 位置的最佳方式。
我已经看到getAdapterPosition() 是通过搜索视图保持项目位置的最佳方式。
如果有人可以帮助我实现在搜索后保持膨胀的最佳方法,我将不胜感激!具体场景的代码我也会在后面给出一个例子。
另外,为澄清起见,我在适配器的 onBindViewHolder 方法中对 RecyclerAdapter 的视图进行膨胀。
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时,该项目按预期返回,但是,如果我单击该项目,则出现success1而不是success2。
对此最好的解决办法是什么?
任何帮助将不胜感激!
【问题讨论】:
标签: android android-studio searchview android-recyclerview