Android:带有附加参数的onClick回调?

时间:2012-12-27 14:51:47

标签: android buttonclick

从此开始

<Button
            android:onClick="onBtnClicked"
            android:id="@+id/btn_edit_shared_preferences"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_show_map"
            android:layout_centerHorizontal="true"
            android:text="Edit Shared Preferences" />

Here表示发送给onClick回调函数的唯一参数是View对象。

好吧,我可能需要一些“额外参数”,比如在这种情况下:我有一个处理活动的功能,所以它会是

openActivity(View v){..}

另一方面,我希望在布局中

:onclick="openActivity(activityClassName)"

做与此类似的事情的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以将android:tag="YouActivity"android:onClick="openActivity"

一起使用

现在您可以在Activity中添加openActivity()名称,如下所示:

void openActivity(View v)
{
    String activityName = v.getTag().toString();
    Class<?> aClass = null;
    try {
            aClass = Class.forName("your.package."+activityName);
    } catch (ClassNotFoundException e) {
            e.printStackTrace();
    }
    startActivity(new Intent(this, aClass));
}

答案 1 :(得分:0)

嗯,onClick事件获取的仅查看对象参数,但您可以通过Context对象获取更多信息。

答案 2 :(得分:0)

单个按钮可以对应单个方法。没有办法通过额外的参数。例如,在您的情况下,您希望按钮启动活动。一种方法是编写一个方法来启动该活动。

<Button
        android:onClick="launchPreferencesActivity"
        android:id="@+id/btn_edit_shared_preferences"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_show_map"
        android:layout_centerHorizontal="true"
        android:text="Edit Shared Preferences" />

然后在你的活动中:

public void launchPreferencesActivity(View v){
        //start Activity
}

不同的按钮可以对应于处理click事件的不同方法。或者,如果需要,可以使用View参数来区分调用方法的视图并以此方式处理它。

如果还有其他因素可能会改变按钮的行为,您可以随时更改代码中的onClickListener。但一般来说,我认为上述方法可以更好地满足您的目标。