Recyclerview андроид студия - PullRequest
       5

Recyclerview андроид студия

0 голосов
/ 06 сентября 2018

У меня есть RecyclerView, реализованный в моем приложении MainActivity.

Я добавил к нему адаптер, который использует макет с радиокнопкой. Можно ли отправить идентификатор группы этого RadioButton на мой MainActivity? Или есть способ, которым я могу установить его Group-ID через MainActivity вместо адаптера, чтобы я мог выполнить с ним некоторые операции?

Ответы [ 6 ]

0 голосов
/ 07 сентября 2018

Вы можете использовать интерфейс:

interface OnItemSelectedListener {
    void onItemSelected(/* here you can put your parameters that you want */);
}

И затем добавить параметр для конструктора вашего адаптера:

public class YourAdapter extends RecyclerView.Adapter<MyViewHolder> {
    private OnItemSelectedListener listener;

    public YourAdapter(OnItemSelectedListener listener) {
        this.listener = listener;
    }

    //call listener.onItemSelected(your, parameters); whenever needed
}

В своей деятельности вы можете использовать

new YourAdapter(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(your, parameters) {
        //do whatever
    }
}

или внедрите этот интерфейс в свою деятельность:

public class YourActivity extends Activity implements OnItemSelectedListener {
    //...

    public void onItemSelected(your, parameters) {
        //do whatever
    }
}
0 голосов
/ 06 сентября 2018

Вам необходимо создать интерфейс для обработки события нажатия в вашем адаптере.

interface OnAdapterClick{
    void OnItemClicked(View v, int position);
}

Если у вас есть интерфейс, подключенный между Activity и Adapter

private List<Model> entries;
private OnAdapterClick clickListener;

MyAdapter(List<Model> entries, OnAdapterClick  clickListener)
{
    this.entries = entries;
    this.clickListener = clickListener;
}

Вам нужно обработать щелчок в классе viewHolder

class ViewHolderModel extends RecyclerView.ViewHolder implements View.OnClickListener {
private RadioGroup mRadioGroup;


ViewHolderModel(View itemView)
{
    super(itemView);

    this.mRadioGroup = itemView.findViewById(R.id.my_radio_group);
    mRadioGroup.setOnClickListener(this);
}


@Override
public void onClick(View view) {
    clickListener.OnItemClicked(view,getAdapterPosition());
}
}

открытый класс MainActivity расширяет AppCompatActivity, реализует MyAdapter.OnAdapterClick {

MyAdapter entryAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    entryAdapter = new MyAdapter(list, this);
    recyclerView.setAdapter(entryAdapter);

}

@Override
public void OnItemClicked(View v, int position) {
    //HERE YOU DO WHATEVER YOU WANT DO WHEN THE CHECKBOX IS CLICKED
}
}

Я думаю, это поможет вам.

0 голосов
/ 06 сентября 2018

Да, вы можете сделать это по-другому:

Первый использует content MainActivity. Например,

Когда вы создаете объект Adapter в MainActivity Просто передайте context в конструктор adapter, например,

Это адаптер класса

private Activity activity;

public FeedAdapter(final Activity activity) {
    this.activity = activity;

} 

 //on radion btn click or item view click 
 radioBtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               ((MainActivity)activity).updateSetectedPosition(position);
           }
       });

Теперь вы можете создать публичный метод в MainActivity

// By default it's -1 that means in the earlier user not selected anything
private int selectedPos=-1;

public void updateSetectedPosition(final int position){
selectedPos = position;
}

Второй способ - это интерфейс, который уже определен выше здесь .

0 голосов
/ 06 сентября 2018

Использовать интерфейс:

interface OnItemSelectedListener {
    void onItemSelected(/* put whatever parameters you want here */);
}

А затем добавьте это в качестве параметра для конструктора вашего адаптера:

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    private OnItemSelectedListener listener;

    public MyAdapter(OnItemSelectedListener listener) {
        this.listener = listener;
    }

    //call listener.onItemSelected(your, parameters); whenever needed
}

В своей деятельности вы можете использовать

new MyAdapter(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(your, parameters) {
        //do whatever
    }
}

или внедрите этот интерфейс в свою деятельность:

public class WhateverActivity extends Activity implements OnItemSelectedListener {
    //...

    public void onItemSelected(your, parameters) {
        //do whatever
    }
}
0 голосов
/ 06 сентября 2018

Если действительно нужно выполнить какое-то действие с идентификатором переключателя, который относится к элементу RecyclerView, то можно использовать метод CallBack для передачи идентификатора в действие. Я думаю, что эта концепция будет полезна для вашей проблемы.Следует иметь в виду, что элемент RecyclerView должен быть связан с onBindViewHolder в адаптере. Вы также можете выполнять свои действия с идентификатором Radio Button на Binder вашего класса адаптера.

Слушатель находится в следующем,

public interface GetRadioIdListener {
    void onGetRadioId(int id);
   }

Объявите и инициализируйте слушатель вашего класса RecyclerView.Adapter следующим образом -

private GetRadioIdListener idListener;

idListener = (GetRadioIdListener) context;

Выполните функцию щелчка на RadioButton и получите идентификатор RadioButton. Затем просто вызовите метод, подобный этому -

idListener.onGetRadioId(radioId);

Думаю, это будет полезно.

0 голосов
/ 06 сентября 2018

Вы можете, но не должны. Данные должны быть связаны RecyclerView, в onBindViewHolder вы создаете прослушиватель, который да может уведомить основное действие от события. Если кнопка для запуска прослушивателя находится за пределами представлений элементов RecyclerView, вы можете просто получить все данные из адаптера и проверить их обновленное состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...