[英]searchfilter on recyclerview after filter getting wrong item selected problem
[英]Getting Wrong position of RecyclerView Item in next Fragment after applying SearchFilter and OnClick on RecyclerView Item
我已經在Fragment上設置了RecyclerView
。我已經從RecyclerView Adapter設置了ReClickerView項目的OnClick
偵聽SearchFilter
。我使用SearchFilter獲得了Filtered項。過濾項目后位置錯誤。這是用於設置Recyclerview Adapter的代碼
public class StatusAdapter extends RecyclerView.Adapter<StatusAdapter.ViewHolder> {
private ArrayList<CurrentEntry> originalList,filterList;
Context context;
public void filter(String newText)
{
filterList.clear();
if(TextUtils.isEmpty(newText))
{
filterList.addAll(originalList);
}
else
{
for(CurrentStatusEntry entry:originalList)
{
if(entry.getName().toLowerCase().contains(newText))
filterList.add(entry);
}
notifyDataSetChanged();
}
// notifyDataSetChanged();
}
public StatusAdapter(ArrayList<CurrentEntry> originalList,Context context)
{
this.originalList=originalList;
this.context=context;
this.filterList=new ArrayList<CurrentEntry>();
this.filterList.addAll(this.originalList);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.current_status_card,parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
final CurrentEntry current=filterList.get(position);
int temppos=holder.getAdapterPosition();
int finalPos=temppos+1;
holder.Name.setText(current.getName());
holder.People.setText(current.getNo());
holder.Estimate.setText(current.getEsti());
holder.bookTime.setText(current.getTime());
holder.myNumber.setText(String.valueOf(finalPos));
holder.lapsedTime.setText(current.getLapsedTime());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position=holder.getAdapterPosition();
Bundle bundle=new Bundle();
bundle.putInt("position",position);
StatusInfo satusInfo=new StatusInfo();
satusInfo.setArguments(bundle);
AppCompatActivity activity=(AppCompatActivity)v.getContext();
activity.getSupportFragmentManager().beginTransaction().add(R.id.frame,satusInfo).addToBackStack("info").commit();
}
});
}
@Override
public int getItemCount() {
return (null!=filterList ? filterList.size():0);
}
這是我的ViewHolder的代碼
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView Name ;
private TextView People;
private TextView Estimate;
private TextView myNumber;
private TextView bookTime;
private TextView lapsedTime;
private ViewHolder(View itemView) {
super(itemView);
Name=(TextView)itemView.findViewById(R.id.name);
People=(TextView)itemView.findViewById(R.id.people);
Estimate=(TextView)itemView.findViewById(R.id.estimate);
myNumber=(TextView)itemView.findViewById(R.id.no);
bookTime=(TextView)itemView.findViewById(R.id.bookTime);
lapsedTime=(TextView)itemView.findViewById(R.id.lapsedTime);
}
過濾后如何獲得RecyclerView項目的正確位置?
使用對象索引從originalList
查找位置,我已經更新了代碼
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position=holder.getAdapterPosition();
Bundle bundle=new Bundle();
// change
bundle.putInt("position", originalList.indexOf(filterList.get(position)));
StatusInfo satusInfo=new StatusInfo();
satusInfo.setArguments(bundle);
AppCompatActivity activity=(AppCompatActivity)v.getContext();
activity.getSupportFragmentManager().beginTransaction().add(R.id.frame,satusInfo).addToBackStack("info").commit();
}
});
傳遞位置是無用的嘗試傳遞直接對象或id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.