Search code examples
androidandroid-studioandroid-recyclerviewonitemselectedlistener

one item clickable in RecyclerView in android


i'm working on some kind of educational game, in this game i represent nine levels in recyclerview each level is enabled when the previous one, now i'm trying to make one item in the recycler View enable and the others unable, i been searching in youtube , and other websites, my question is how to do it?(note: i'm new in android studio so keep it simple as possible).

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {

private List<ItemView> items;
private Context context;

public ListAdapter(List<ItemView> items , Context context){
    this.items = items;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   View view = LayoutInflater.from(parent.getContext())
           .inflate(R.layout.item_list , parent , false);






return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
     ItemView i = items.get(position);



                 holder.setHeadText(i.getHead());
     holder.setScoreText(i.getScore());


}

@Override
public int getItemCount() {
    return items.size();
}

class ViewHolder extends RecyclerView.ViewHolder {
    private TextView headText , scoreText;

    public ViewHolder(View itemView) {
        super(itemView);

        headText = (TextView)itemView.findViewById(R.id.head);
        scoreText = (TextView)itemView.findViewById(R.id.score);
    }

    public void setHeadText(String headText) {
        this.headText.setText(headText);
    }

    public void setScoreText(String scoreText) {
        this.scoreText.setText(scoreText);
    }
}

}


Solution

  • You can achieve this by

    Add a interface like this in your adapter class

     public interface ItemClickListner{
        void onItemClick(ItemView item);
    }
    

    Initialize this Interface

        private ItemClickListner clickManager;
    

    Add a Param Adapter class constructor

    public ListAdapter(List<ItemView> items , Context context,ItemClickListner clickManager){
    this.items = items;
    this.context = context;
    this.clickManager=clickManager;
    }
    

    In Your ViewHolder Add a OnClickListner for itemView

    itemView.setOnClickListener(this);
    

    in Your onClick override function

    if(clickManager!=null)
        clickManager.onItemClick(items.get(getAdapterPosition()));