Как добавить событие действия для RadioButton в представлении recyler? - PullRequest
0 голосов
/ 30 июня 2018

Я создал RecylerView, который позволяет учителю добавлять сведения о посещаемости в базу данных, я создал две радиопереключатели внутри радиогруппы, я попытался добавить для них прослушиватель событий, но это не сработало.

Фактический вид переработчика

enter image description here

Код моего адаптера

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

private List<String> atd ;
private Context context;
String str;
private DatabaseReference demo;

public AtdListAdapter(List<String> atd, Context context) {
    this.atd = atd;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.atdliststaff,null);

    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {


    str = atd.get(position);
    holder.name.setText(str);

}

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

public   class ViewHolder extends RecyclerView.ViewHolder{
    private  DatabaseReference demo;
    private   TextView name;
    private  RadioButton rb1,rb2;
    private  RadioGroup rg;

    public ViewHolder(View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);

        rg = itemView.findViewById(R.id.rg);
        rb1 = itemView.findViewById(R.id.rb1);
        rb2 = itemView.findViewById(R.id.rb2);

        if(rb1.isSelected()) {
            demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");
            demo.setValue("Present");
            Toast.makeText(context, "updated by Present", Toast.LENGTH_SHORT).show();

        }

        else if(rb2.isSelected())
        {
            demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");

            demo.setValue("Absent");
            Toast.makeText(context, "Updated by Absent", Toast.LENGTH_SHORT).show();

        }

   }
}
}

Я также пытался добавить прослушиватель события radiobutton внутри метода onBindViewHolder (), но он тоже не работал.

Ответы [ 3 ]

0 голосов
/ 30 июня 2018
    Replace your holder with this :

public   class ViewHolder extends RecyclerView.ViewHolder{
    private  DatabaseReference demo;
    private   TextView name;
    private  RadioButton rb1,rb2;
    private  RadioGroup rg;

    public ViewHolder(View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);

        rg = itemView.findViewById(R.id.rg);
        rb1 = itemView.findViewById(R.id.rb1);
        rb2 = itemView.findViewById(R.id.rb2);

rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b){
                   demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");
            demo.setValue("Present");
            Toast.makeText(context, "updated by Present", Toast.LENGTH_SHORT).show();
                }
            }
        });

     rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if (b){
                demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");

            demo.setValue("Absent");
            Toast.makeText(context, "Updated by Absent", Toast.LENGTH_SHORT).show();
            }
        }
    });  

   }
}
0 голосов
/ 30 июня 2018

Попробуйте этот код .. сделать интерфейс в класс адаптера, как показано ниже ..

  OnItemClick onItemClick;

public void setOnItemClick(OnItemClick onItemClick) {
    this.onItemClick = onItemClick;
}

public interface OnItemClick {
    void getPosition(boolean flag); //pass any things
}

после этого ..

@Override
public void onBindViewHolder(ItemViewHolder holder, final int position) {
    // below code handle click event on recycler view item.
    String data = mStringList.get(position);
    holder.textView.setText(data);
    holder.radiobutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClick.getPosition(true);
        }
    });
    holder.radiobutton2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClick.getPosition(true);
        }
    });


}

после того, как этот адаптер привязан к программе просмотра, это означает, что адаптер не равен NULL, а затем вызовите приведенный ниже код.

        adpater.setOnItemClick(new RecyclerViewAdpater.OnItemClick() {
        @Override
        public void getPosition(boolean flag) {
            if(flag) {
                demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");
                demo.setValue("Present");
                Toast.makeText(context, "updated by Present", Toast.LENGTH_SHORT).show();
                adpater.notifyDataSetChanged();
            }

            else if(flag)
            {
                demo = FirebaseDatabase.getInstance().getReference().child("IDS").child("AtdList").child("1").child("1").child(str).child("status");

                demo.setValue("Absent");
                Toast.makeText(context, "Updated by Absent", Toast.LENGTH_SHORT).show();
                adpater.notifyDataSetChanged();
            }
        }
    });
0 голосов
/ 30 июня 2018

вызовите этот метод. Сначала вам нужно реализовать событие Click для радиокнопки,

public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();

// Check which radio button was clicked
switch(view.getId()) {
    case R.id.radio_pirates:
        if (checked)
            // Pirates are the best
        break;
    case R.id.radio_ninjas:
        if (checked)
            // Ninjas rule
        break;
}

}

Подробнее здесь.

...