2011-04-18 63 views
34

我目前有一些按钮的活动。可以在按钮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

您有数百个按钮,在你的XML?你能解释一下你想要完成什么吗?当然有更好的方法。看起来你可以简单地将ListView或GridView与适配器设置为类似于PageButton项目的数组(例如,包含:int page,int drawableId)。 – kcoppock 2011-04-18 19:14:04

+0

数以百计的一种布局可能是我身边的一种折磨。事实上,我在每个活动中都有4个按钮,导致不同的页面(就像一本书,但有点不同).OcuS的答案对我来说是完美的。 – 2011-04-18 19:48:05

回答

83

这不是直接可能的。但是,也许你可以使用android:tag来获取你的参数。

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

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

干净整洁的解决方案。 – teapeng 2016-02-25 02:43:12

+2

String pageNumber = v.getTag()。toString(); – user5195185 2016-04-07 02:21:11

2

如果您将在XML创建一些布局元素,你可以使用有

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

其中some_id_value是一种独特的字符串,将被翻译成ID被保存在R.java(更好地为你 - 唐“T改变比任何代码那里),你可以通过使用

R.id.some_id_value 

读一点点there这真的基本得到那个ID。

0

您可以为视图设置标签。标签基本上是意见获得记忆的一种方式。

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"/> 

2(字符串数据类型)的行android:tag="2"设置一个标记值Button2

的Java文件:

一般案例:
Inside 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(); 
} 
相关问题