There is a fragment in which RecyclerView and Adapter (the code is attached below). The whole point is that several months ago I created a project in which everything worked, and there was something wrong with this, I rewrote everything from the old project, there are no errors.

Fragment:

 public class PortfolioTaskFragment extends Fragment { private List<PortfolioElement> portfolioElementList; RecyclerView recyclerView; LinearLayoutManager linearLayoutManager; RecyclerViewAdapter recyclerViewAdapter; public PortfolioTaskFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_portfolio_task, container, false); recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); linearLayoutManager =new LinearLayoutManager(getContext()); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(linearLayoutManager); initializeData(); initializeAdapter(); return rootView; } private void initializeData() { //Наполнение RecyclerView } private void initializeAdapter(){ recyclerViewAdapter = new RecyclerViewAdapter(portfolioElementList); recyclerViewAdapter.SetOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener(){ @Override public void onItemClick(View view, int position) { switch (position){ case 0: Toast.makeText(getActivity(), "qwertyu", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getActivity(), "asdfzvzxcvzxcv", Toast.LENGTH_SHORT).show(); } } }); recyclerView.setAdapter(recyclerViewAdapter); } } 

Adapter:

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ElementViewHolder>{ public List<PortfolioElement> portfolioElementList; OnItemClickListener clickListener; public RecyclerViewAdapter(List<PortfolioElement> portfolioElementList) { this.portfolioElementList = portfolioElementList; } public RecyclerViewAdapter.ElementViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_for_recycler, parent, false); ElementViewHolder elementViewHolder = new ElementViewHolder(view); return elementViewHolder; } @Override public void onBindViewHolder(RecyclerViewAdapter.ElementViewHolder holder, int position) { holder.textView.setText(portfolioElementList.get(position).text); holder.relativeLayout.setBackgroundResource(portfolioElementList.get(position).photoID); } @Override public int getItemCount() { return portfolioElementList.size(); } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } public class ElementViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { CardView cardView; TextView textView; RelativeLayout relativeLayout; public ElementViewHolder(View itemView) { super(itemView); cardView = (CardView) itemView.findViewById(R.id.card_view); textView = (TextView) itemView.findViewById(R.id.text_on_image); relativeLayout = (RelativeLayout) itemView.findViewById(R.id.image_card_view); } @Override public void onClick(View v) { clickListener.onItemClick(v,getAdapterPosition()); } } public interface OnItemClickListener { void onItemClick(View view, int position); } public void SetOnItemClickListener(final OnItemClickListener itemClickListener) { this.clickListener = itemClickListener; } 

} `

    1 answer 1

    He asked himself answered.

     @Override public void onClick(View v) { clickListener.onItemClick(v,getAdapterPosition()); } 

    instead of getAdapterPosition() registered getPosition() and it worked.

    Can someone come in handy =)

    • one
      In fact, getPosition() deprecated because of problems with working in asynchronous mode. For you, this will end in that the result returned by the method will not always correspond to the actual position. Instead, it is recommended to getLayoutPosition() or getAdapterPosition() , each of which has its own nuances and problems. It is worth getAdapterPosition() out why you cannot get the desired result from getAdapterPosition() and it doesn’t work out the best description of the problem. - pavlofff
    • @pavlofff will be glad if you help, he sat and looked at it for 2 hours, nothing came to mind - newakkoff
    • @pavloff getLayoutPosition() works without problems, thanks. - newakkoff