как установить onclick для нескольких кнопок в режиме ресайклера - PullRequest
0 голосов
/ 27 мая 2020

Я новичок, хочу реализовать простой по обучению проект. Но у меня возникли проблемы с реализацией этого На этой фотографии показаны 12 из 240 кнопок, которые я сделал с помощью recyclerview

это представление переработчика создает список уровней, каждый уровень которых имеет различную информацию, которую я хочу установить при нажатии на уровне кнопок, я пытаюсь использовать для этого интерфейс. но onclick установлен для всех элементов recyclerview и не распознает кнопки

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));



        }


    }

}

1 Ответ

0 голосов
/ 27 мая 2020

Вы устанавливаете clickListener для любой кнопки в 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 .............

}
...