Две кнопки с одинаковым идентификатором в разных видах - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь поменять местами макеты в своем фрагменте, установив один вид invisivle, а другой - видимым. Однако я хочу использовать одну и ту же кнопку в обоих случаях, которая прекрасно работает на стороне пользовательского интерфейса приложения, но я не могу получить событие onClick во фрагменте от кнопки во втором представлении.

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/id_subfragment"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/id_tv"
    android:gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:textSize="20sp"
    android:text="SomeText" />

<RelativeLayout
    android:id="@+id/id_relLayout_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/id_tv">

    <Button
        android:id="@+id/id_button_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        app:backgroundTint="@color/colorPrimaryDark"
        android:text="Button" />
</RelativeLayout>

<RelativeLayout
    android:id="@+id/id_relLayout_2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/id_tv">

    <Button
        android:id="@id/id_button_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        app:backgroundTint="@color/colorPrimaryDark"
        android:text="Button" />
 </RelativeLayout>
</RelativeLayout>

Как видите, кнопки имеют одинаковый идентификатор, поэтому в моем Fragment-классе (который реализует View.onClickListener я должен иметь возможность получить onClick-Event для обоихКод из фрагмента в onCreateView:

Button button = v.findViewById(R.id.id_button_next);
button.setOnClickListener(this);

Я «изменяю» макеты с помощью

v.findViewById(R.id.id_relLayout_1).setVisibility(View.GONE);
v.findViewById(R.id.id_relLayout_2).setVisibility(View.VISIBLE);

Спасибо за любую помощь!

1 Ответ

1 голос
/ 08 ноября 2019

findViewById возвращает первое представление с указанным идентификатором, но если я не ошибаюсь, вы сможете ссылаться на эти кнопки, используя их родителей. Поэтому вместо:

Button button = v.findViewById(R.id.id_button_next);
button.setOnClickListener(this);

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

RelativeLayout parent1 = v.findViewById(R.id.id_relLayout_1)
Button buttonInParent1 = parent1.findViewById(R.id.id_button_next)
buttonInParent1.setOnClickListener(this);

RelativeLayout parent2 = v.findViewById(R.id.id_relLayout_2)
Button buttonInParent2 = parent2.findViewById(R.id.id_button_next)
buttonInParent2.setOnClickListener(this);

Но я хочу отметить, что использование одинаковых идентификаторов в одном представлении считается плохой практикой.

...