我有一个RecyclerView来向我展示ArrayList的一些项目。我在该RecyclerView上有一个OnClick,但是我需要该项目在RecyclerView中的位置。
这是我的ReciclerView适配器:
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> implements View.OnClickListener {
private ArrayList<MyList> myList;
Context context;
public MainAdapter(ArrayList<MyList> myList, Context context) {
this.myList = myList;
this.context = context;
}
@NonNull
@Override
public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
ViewHolder vh = new ViewHolder(v);
vh.title.setOnClickListener(this);
vh.title.setTag(viewType);
return vh;
}
@Override
public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) {
holder.title.setText(myList.get(position).getTitle()); //Function getTitle is related to ArrayList<MyList>
}
@Override
public int getItemCount() {
return myList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
}
}
@Override
public void onClick(View v) {
int itemPosition = (int) v.getTag();
switch (v.getId())
{
case R.id.title:
Toast.makeText(context, itemPosition, Toast.LENGTH_SHORT).show();
//itemPosition is always 0 and I don't know why
break;
}
}
}
我使用Toast来验证我是否获得了准确的位置,但是,无论我单击哪个项目,它始终为我提供位置0。
感谢您的帮助!
答案 0 :(得分:0)
将onClick()
放入您的ViewHolder
内,使用getAdapterPosition()
来获取位置并将其显示在Toast中,如下所示:
@Override
public void onClick(View view) {
int position = getAdapterPosition();
Toast.makeText(mContext, "Clicked Position"+position, Toast.LENGTH_SHORT).show();
}