如何在RecyclerView中获取被单击项的位置

时间:2019-07-07 17:13:33

标签: java android android-recyclerview recycler-adapter

我有一个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。

感谢您的帮助!

1 个答案:

答案 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();
}