【发布时间】:2018-04-09 11:09:53
【问题描述】:
我在 Fragment 上设置了 RecyclerView。我已经为 RecyclerView Adapter 中的 RecyclerView 项目设置了 OnClick 侦听器。我使用 SearchFilter 获得过滤项目。在点击 RecyclerView 项目后,我需要获取项目位置并传入捆绑到下一个片段。但过滤项目后我的位置错误。这是设置 Recyclerview 适配器的代码
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 item的正确位置?
【问题讨论】:
-
你能告诉我们你的视图持有者代码吗?
-
我已经添加了我的 ViewHolder 代码
-
显然位置没有意义......你应该使用一些id
标签: android android-fragments android-recyclerview android-cardview android-search