Cam*_*oft 4 java android onclick button
单击按钮时是否可以将参数传递给侦听器:
protected void onCreate(Bundle savedInstanceState) {
....
String myArg = "Hello";
Button button1 = (Button)findViewById(R.id.myButton);
button1.setOnClickListener(myListener);
String myArg = "Goodye";
Button button2 = (Button)findViewById(R.id.myOtherButton);
button2.setOnClickListener(myListener);
}
OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// print the value from the passed in argument myArg
Log.v("TEST", myArg);
}
};
Run Code Online (Sandbox Code Playgroud)
这只是一个例子而不是对我实际不想做的事情的反思,但它确实说明了这个问题.
基本上我想将myArg传递给监听器,因此当单击该按钮时,它可以访问myArg变量.
我知道我可以将它作为一个内联匿名类来实现,但是我会有很多按钮,所有这些按钮的点击逻辑都是相同的.我需要参数,因为每个按钮都会有所不同.
仅供参考:我的实际用法要求参数为View对象.
我认为解决此类问题的典型方式是测试点击目标的ID:
OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId()==R.id.myButton) {
//
} elseif (v.getId()==R.id.myOtherButton) {
//
}
}
};
Run Code Online (Sandbox Code Playgroud)
如果这不够,您可以使用视图的通用标记属性:
Button button1 = (Button)findViewById(R.id.myButton);
button1.setTag("Hello");
button1.setOnClickListener(myListener);
Button button2 = (Button)findViewById(R.id.myOtherButton);
button2.setTag("Goodye");
button2.setOnClickListener(myListener);
...
OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// print the value from the passed in argument myArg
Log.v("TEST", v.getTag());
}
};
Run Code Online (Sandbox Code Playgroud)
最后你甚至可以设置多个标签:
button1.setTag(R.id.arg1, "Hello");
button1.setTag(R.id.arg2, "World");
Run Code Online (Sandbox Code Playgroud)
这适合你的目的吗?
为什么不创建一个实现View.OnClickListener的类?如果您重复使用每个按钮的代码,这将是理想的选择.
public class MyListener implements View.OnClickListener
{
private View mView;
public MyListener(View v) {
mView = v;
}
@Override
public void onClick(View v) {
// Use mView here if needed
}
}
Run Code Online (Sandbox Code Playgroud)
然后像平常一样使用它:
OnClickListener listener = new MyListener(myView);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |