Возможность добавлять параметры в кнопку 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, возможно ли это?
Большое спасибо за любую помощь.
Ответы
Ответ 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();
}