Как проверить, какой RecyclerView был нажат - PullRequest
0 голосов
/ 26 мая 2019

У меня есть вид с двумя RecyclerViews. У них разные ArrayLists, но адаптеры одного типа. В методе OnClick в моем задании я хочу узнать, какой из Recyclers был нажат, а затем выбрать выбранный элемент.

Я пытался использовать view instanceof RecylcerView, но это не сработало.

Ответы [ 4 ]

1 голос
/ 26 мая 2019

Вы можете добавить onClickListener в дочерний макет относительнойLayout.

Учитывая, что первый RecyclerView имеет LinearLayout, а второй - RelativeLayout внутри (я имею в виду, что LinearLayout является родительским макетом отдельного элемента в первом RecyclerView, а RelativeLayout является родительским макетом отдельногоэлемент во втором RecyclerView).

linLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        getParentName(v);
    }
});
    relLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        getParentName(v);
    }
});
private void getParentName (View v){
    View view = (View) v.getParent();
    switch (view.getId()) {
        case R.id.linLayout:
            Toast.makeText(MainActivity.this, "First One", Toast.LENGTH_SHORT).show();
            break;
        case R.id.relLayout:
            Toast.makeText(MainActivity.this, "Second One", Toast.LENGTH_SHORT).show();
            break;
    }
}

Мы знаем, что если это LinearLayout, то его родителем является первый RecyclerView.Если это RelativeLayout, то его родителем является второй RecyclerView.

Но с помощью этого вышеупомянутого метода мы можем сделать корневой макет отдельных дочерних представлений таким же Layout (LinearLayout или RelativeLayout) и увидеть, что вышеуказанная функция работает.

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

Мне наконец удалось это выяснить.Это было проще, чем большинство ответов, так как все решается в упражнении onClick метод:

public void onClick(View v){
    ViewParent parent = v.getParent();
        switch (((RecyclerView) parent).getId()) {
            case R.id.recycler_first:
            // Code
            break;
            case R.id.recycler_second:
            // Code
            break;
        }
}
0 голосов
/ 26 мая 2019

Я думаю, что вы просто ищете onClickListener для каждого RecyclerView в его Adapter. Вы можете сделать это с помощью интерфейсов, в этом случае вам нужно создать 2 интерфейса:

interface clickListenerInFirstRecycler{
void onFirstClick(int position);
}

interface clickListenerInSecondRecycler{
    void onSecondClick(int position);
}

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

Затем в вашем классе Adapter создайте глобальные переменные этих интерфейсов и методы его установки:

private  clickListenerInFirstRecycler listener;

public void setOnClickListener(clickListenerInFirstRecycler listener){
    this.listener = listener;
}

Аналогично со вторым интерфейсом и адаптером.

Затем в onBindViewHolder вызовите эту переменную, в данном случае listener, метод, который вы создали (в первом случае onFirstClick), и передайте соответствующий аргумент. В данном случае это просто позиция:

listener.onFirstClick(position);

Затем перейдите к своей деятельности и заставьте их реализовать эти интерфейсы. Вам нужно будет переопределить методы из интерфейсов, и оттуда вы сможете обрабатывать клики из указанного RecyclerView и данные оттуда. Не забудьте вызвать onCreate или после инициализации Adapter для настройки этих интерфейсов: adapter.setOnClickListener(this)

0 голосов
/ 26 мая 2019

В прослушивателе щелчков вашей активности вам просто нужно проверить, какой View соответствует идентификатору строки RecyclerView.

RecyclerView_row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView1I"
android:layout_width="match_parent"
android:layout_height="wrap_content">

   <!---  RecyclerView's other Views -->


</RelativeLayout>

MainActivity

override fun onItemClick(view: View, position: Int) {

     if(view.id == R.id.recyclerView1I){
         //Do stuff
     }

Таким образом вы определяете, какой RecyclerView был нажат, при условии, что ваши интерфейсы OnClickListener уже настроены в ваших адаптерах.Я написал этот ответ на Kotlin, но вы сможете легко конвертировать в Java:)

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