我在所有 6 项活动中都有 7 个按钮。所有 6 个按钮在所有活动中都具有相同的功能。如何为这 6 个按钮执行常见的单击事件侦听器。
7 回答
您可以像这样创建一个实现 View.OnClickListener 的新类:
public class MyClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
// TODO handle the click
}
}
然后,在您的所有活动中,您可以像这样设置点击侦听器:
button.setOnClickListener(new MyClickListener());
您甚至可以将上下文保存在类中以显示 Toast 等。
public class MyClickListener implements View.OnClickListener {
private Context context;
public MyClickListener(Context context) {
this.context = context;
}
@Override
public void onClick(View view) {
Button button = (Button) view;
Toast.makeText(this.context, button.getText().toString(), Toast.LENGTH_SHORT).show();
}
}
有这样的课:
public class OnClickMaker{
public static View.OnClickListener getOnClick(){
return new View.OnClickListener(){
public void on click(View v){
//do stuff
}
};
}
}
然后在你的另一堂课上,这样做
button.setOnClickListener(OnClickMaker.getOnClick());
在上面给出的 Sagar 的答案中添加更多的话。
假设:
正如您所说,您的 6 个活动中有 7 个按钮,我假设所有 7 个按钮都具有相同的功能/代码。
解决方案:
第 1 步:包含android:click="btnFirstClick"
在<Button>
您的 XML 布局中。
第 2 步:通过扩展 Activity 定义抽象 BaseActivity 类,并包含与您在android:onClick
属性中给出的相同名称的方法。
abstract public class BaseActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void btnFirstClick(View v) {
}
public void btnSecondClick(View v) {
}
.....
.....
// same for other buttons
}
第 3 步:现在将此 BaseActivity 扩展到您的所有 6 个活动。
例如:
public class FirstActivity extends BaseActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_first);
}
}
你可以这样做
创建基础活动
class BaseActivity extends Activity{
public void onSpecificEvent(View v){
// do your tasks
}
}
现在扩展您的活动
class Activity1 extends BaseActivity
class Activity2 extends BaseActivity
在 xml 中您需要在哪些按钮中实现 onClick 使用
android:onClick="onSpecificEvent"
在一个类中创建一个函数,并将该类放在所有其他类所在的同一个包中。只需在 6 个 onclicklisteners 中调用该函数即可。
如果您和我一样处于相同的情况,我有一个线性布局,其中包含不确定数量的按钮(动态生成),并且您希望所有按钮都有一个通用侦听器(例如注销其文本),您可以这样做这个
for (int i = 0; i < linearLayout.getChildCount(); i++)
{
final Button b = (Button) linearLayout.getChildAt(i);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Commons.log(b.getText().toString());
//your other code here
}
});
}
现在线性布局的所有子(按钮)都有相同的点击监听器
你可以这样做,
将点击事件放在 XML 文件中android:click="clickMe"
Activity
说创建这个函数
public void clickMe(View view) {
...//You handling code
}
并通过您的所有活动扩展此活动。