Как получить позицию нажатого элемента в RecyclerView - PullRequest
0 голосов
/ 07 июля 2019

У меня есть RecyclerView, чтобы показать мне некоторые элементы ArrayList.У меня есть OnClick для этого RecyclerView, но мне нужно положение этого элемента в 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;
        }
    }
}

Я использовал тост, чтобы убедиться, что я 'Однако, я получаю точную позицию, независимо от того, на какой элемент я нажимаю, он всегда дает мне позицию 0.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 07 июля 2019

Поместите onClick() внутрь вашего ViewHolder, используйте getAdapterPosition(), чтобы получить позицию и показать ее в тосте так:

@Override
public void onClick(View view) {
       int position = getAdapterPosition();
       Toast.makeText(mContext, "Clicked Position"+position, Toast.LENGTH_SHORT).show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...