0

I am a newcomer, I want to implement a simple project to learn. But I had trouble implementing this This photo shows 12 of the 240 buttons I made with recyclerview

this recycler view create a list of levels that each level have different information i want set onclick on level buttons , i try to use a interface to this . but onclick set to all recyclerview item and not recognize buttons

package com.guesswords.shayan.levels_list;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;

import com.guesswords.shayan.dogame.dogame;
import com.guesswords.shayan.guesswords.R;

import java.util.ArrayList;
import java.util.List;

public class Levels_list extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_levels_list);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.Levels_list_Recyclerview);

        Level_RecyclerView_Adapter adapter=new Level_RecyclerView_Adapter(this, levelsList());

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(adapter);

    }
    private List<Levels> levelsList(){
        List<Levels>levels=new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            Levels level=new Levels();
            level.setLevel(""+i);
            levels.add(level);
        }
        return levels;
    }


}




----------------------------------------------------------------------------




package com.guesswords.shayan.levels_list;

import android.content.Context;
import android.content.Intent;
import android.preference.TwoStatePreference;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.guesswords.shayan.dogame.dogame;
import com.guesswords.shayan.guesswords.MainActivity;
import com.guesswords.shayan.guesswords.R;

import java.util.List;

import static com.guesswords.shayan.guesswords.R.layout.activity_buy_gold;
import static com.guesswords.shayan.guesswords.R.layout.level_list_sample;


public class Level_RecyclerView_Adapter extends RecyclerView.Adapter<Level_RecyclerView_Adapter.MyViewHolder> {

    private Context context;
    private List<Levels> levels;


    public Level_RecyclerView_Adapter(Context context, List<Levels> levels){

        this.context = context;
        this.levels=levels;

    }



    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater =LayoutInflater.from(context);
        View view=layoutInflater.inflate(R.layout.level_list_sample,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.Bindlevels(levels.get(position));
        holder.setIsRecyclable(false);

    }

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


    public class MyViewHolder extends RecyclerView.ViewHolder {
        private Button level1;
        private Button level2;
        private Button level3;
        private Button level4;
        private Button level5;
        private Button level6;
        private Button level7;
        private Button level8;
        private Button level9;
        private Button level10;
        private Button level11;
        private Button level12;
        private String pos;

        public MyViewHolder(final View itemView) {
            super(itemView);

            level1 = itemView.findViewById(R.id.Button_Level_1);
            level2 = itemView.findViewById(R.id.Button_Level_2);
            level3 = itemView.findViewById(R.id.Button_Level_3);
            level4 = itemView.findViewById(R.id.Button_Level_4);
            level5 = itemView.findViewById(R.id.Button_Level_5);
            level6 = itemView.findViewById(R.id.Button_Level_6);
            level7 = itemView.findViewById(R.id.Button_Level_7);
            level8 = itemView.findViewById(R.id.Button_Level_8);
            level9 = itemView.findViewById(R.id.Button_Level_9);
            level10 = itemView.findViewById(R.id.Button_Level_10);
            level11 = itemView.findViewById(R.id.Button_Level_11);
            level12 = itemView.findViewById(R.id.Button_Level_12);

        }

        public void Bindlevels(final Levels levels){

           pos = levels.getLevel();
           int i = Integer.parseInt(pos)*12;

            level1.setText(String.valueOf(i+1));
            level2.setText(String.valueOf(i+2));
            level3.setText(String.valueOf(i+3));
            level4.setText(String.valueOf(i+4));
            level5.setText(String.valueOf(i+5));
            level6.setText(String.valueOf(i+6));
            level7.setText(String.valueOf(i+7));
            level8.setText(String.valueOf(i+8));
            level9.setText(String.valueOf(i+9));
            level10.setText(String.valueOf(i+10));
            level11.setText(String.valueOf(i+11));
            level12.setText(String.valueOf(i+12));



        }


    }

}
Shayan
  • 1
  • 1
    You will be able to understand how to add a click to a recyclerview here: https://stackoverflow.com/questions/24471109/recyclerview-onclick – rlinoz May 27 '20 at 20:58

1 Answers1

0

You set the clickListener for any button in onBindViewHolder():

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.Bindlevels(levels.get(position));
holder.setIsRecyclable(false);


//here

//on click button level1

holder.level1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//do something
}
});



//on click button level2


holder.level2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//do something
}
});



//on click button level3


holder.level3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){

//do something
}
});

//do the rest .............

}
Hasan Bou Taam
  • 4,017
  • 2
  • 12
  • 22
  • Thanks for taking the time to respond It works, but it's not, because it's not the job of the onBindViewHolder and the recyclerview, and it doesn't seem right to write this for 12 levels. – Shayan May 28 '20 at 00:10