1

从此开始

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

这里说发送到 onClick 回调函数的唯一参数是 View 对象。

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

openActivity(View v){..}

另一方面,在我想要的布局中

:onclick="openActivity(activityClassName)"

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

4

3 回答 3

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));
}
于 2012-12-27T14:57:09.157 回答
0

好吧,View 对象只是事件获取的参数,但您可以通过Context对象onClick获取更多信息。

于 2012-12-27T14:58:29.087 回答
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
}

不同的按钮可以对应不同的方法来处理点击事件。或者,如果您愿意,您可以使用 View 参数来区分哪个视图正在调用该方法并以这种方式处理它。

如果还有其他因素可能会改变按钮的行为,您可以随时更改代码中的 onClickListener。但总的来说,我认为上述方法更适合您尝试做的事情。

于 2012-12-27T15:01:22.687 回答