如何为多个活动全局定义特定布局onclick函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为多个活动全局定义特定布局onclick函数相关的知识,希望对你有一定的参考价值。
我需要在android中定义多个活动的布局,并且从UI部分开始,它是成功的。但是要编写要在每个单击侦听器上执行的元素,我需要在我使用的所有java页面中定义它。
我们可以在java页面中全局定义它并将其包含在所需的页面中吗?
menuButton = findViewById(R.id.menuButton);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(), MenuActivity.class);
startActivity(i);
finish();
overridePendingTransition(0, 0);
}
});
答案
是和否。
您可以创建一个BaseActivity
,它具有必须为每个按钮单击执行的通用逻辑。
但是,您需要为特定活动的按钮实现侦听器,因为每个活动的生命周期独立于其他活动。
为了使代码更易读(避免使用implementing listener
/ setOnclickListener
),您可以使用ButterKinfe,并为OnClick()
注释创建方法,并在BaseActivity
中调用该方法。
另一答案
您基本上想要做的是调用findViewById()
,只有在您引用Context
变量时才能调用它。你应该使用你的Activity
Context
,因此你将this
传递给静态函数,然后可以访问通过Context
访问的所有方法。
public class ExampleActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MenuUtils.setListener(this);
}
}
像这样定义静态类:
public static class MenuUtils{
public static void setListener(Context context){
menuButton = context.findViewById(R.id.menuButton);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do stuff
}
});
}
}
你应该注意的是,你传递给这个函数的任何Activity
应该在它的布局中有一个menuButton
,否则你冒险获得NullPointerException
,这是当findViewById()
找不到menuButton
时。
以上是关于如何为多个活动全局定义特定布局onclick函数的主要内容,如果未能解决你的问题,请参考以下文章
如何为 onclick 事件选择 Delphi 框架而不是其组件?