Подтвердить что ты не робот

Возможность добавлять параметры в кнопку xml?

В настоящее время у меня есть активность с некоторыми кнопками.

В моем xml кнопки определяются следующим образом:

    <ImageButton (...) android:onClick="GoToPageX"/>

и у меня в моей деятельности:

public void GotoPageX() {
    startActivity(new Intent(this, PageX.class));
    finish();

}

Проблема в том, что у меня есть сотни кнопок и вы не хотите писать

<ImageButton (...) android:onClick="GoToPage1"/>
<ImageButton (...) android:onClick="GoToPage2"/>
<ImageButton (...) android:onClick="GoToPage3"/>
...
<ImageButton (...) android:onClick="GoToPage100"/>

и всех скриптов.

Теперь я использую

public void GotoPage( int i) {
    startActivity(new Intent(getBaseContext(), activities.get(i)));
    finish();
}

и хотел бы дать параметр я из xml, возможно ли это?

Большое спасибо за любую помощь.

4b9b3361

Ответ 1

Это невозможно. Однако, возможно, вы могли бы использовать android:tag для получения вашего параметра.

<ImageButton (...) android:onClick="goToPage" android:tag="25"/>

public void goToPage(View v) {
    String pageNumber = v.getTag().toString(); 
    /* ... */
}

Ответ 2

Если вы создадите элемент макета в xml, вы можете использовать его

<ImageButton
    android:id="@+id/some_id_value" />

где some_id_value - это разновидность уникальной строки, которая будет переведена на id, который хранится в R.java(лучше для вас - ничего там не меняйте), чем в коде, вы можете получить этот id, используя

R.id.some_id_value

немного почитайте там, которые действительно основаны.

Ответ 3

Вы можете установить теги для представления. Теги - это, в основном, способ просмотра воспоминаний.

xml:

<ImageButton
    ...Other Parameters...
    android:id="@+id/Button2"
    android:tag="2"
    android:onClick="GoToPageX"/>
<ImageButton
    ...Other Parameters...
    android:id="@+id/Button3"
    android:tag="3"
    android:onClick="GoToPageX"/>

Строка android:tag="2" устанавливает значение тега 2 (строковый тип данных) на Button2

Файл Java:

Общий случай:
Внутри функции GoToPageX(View v) используйте v.getTag(), чтобы получить значение тега соответствующего представления (из которого когда-либо просматривался метод).

Ваш случай:
Добавьте метод следующим образом:

public void GoToPageX(View v){
    int i = Integer.parseInt(v.getTag()); //parseInt converts string to integer
    startActivity(new Intent(getBaseContext(), activities.get(i)));
    finish();
}

Ответ 4

Вы также можете сделать это, включив привязку данных и используя лямбда-выражение для значения onClick. Это может быть полезно, если вы планируете вводить как int и String. Вот пример простого MainActivity.xml, который использует этот метод.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable name="activity" type="com.example.myapp.MainActivity" />
    </data>
    <LinearLayout android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <ImageButton (...) android:onClick='@{() -> activity.GotoPage(1,"one")}'/>
        <ImageButton (...) android:onClick='@{() -> activity.GotoPage(2,"two")}'/>
        <ImageButton (...) android:onClick='@{() -> activity.GotoPage(3,"three")}'/>
        ...
        <ImageButton (...) android:onClick='@{() -> activity.GotoPage(100,"one hundred")}'/>
    </LinearLayout>
</layout>

и в MainActivity.java

public void GotoPage(int i, String otherVariable) {
    System.out.println(otherVariable);
    startActivity(new Intent(getBaseContext(), activities.get(i)));
    finish();
}