Java 如何为多个活动全局定义特定布局onclick函数

Java 如何为多个活动全局定义特定布局onclick函数,java,android,android-activity,Java,Android,Android Activity,我需要为android中的多个活动定义一个布局,从UI部分来看,它是成功的。但要编写这些元素以在每次单击侦听器上执行,我需要在我使用的所有java页面中定义它 我们能否在java页面中全局定义它,并将其包含在所需页面中 menuButton = findViewById(R.id.menuButton); menuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClic

我需要为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
,它具有每个按钮单击都必须执行的公共逻辑

但您需要为特定活动上的按钮实现侦听器,因为每个活动的生命周期独立于其他活动


为了使代码可读性更好(避免
实现listener
/
setOnclickListener
),您可以使用并为
OnClick()
注释创建一个方法,并在
BaseActivity

中调用该方法,实际上您要做的是调用
findViewById()
,只有在引用了
上下文
变量时,才能调用该变量。您应该使用
活动
上下文
,因此您将
传递给静态函数,然后静态函数可以访问通过
上下文
访问的所有方法

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
        }
    });

  }
}

您需要注意的是,传递给此函数的任何
活动
在其布局中都应该有一个
菜单按钮
,否则您可能会遇到
NullPointerException
,而此时
findViewById()
无法找到
菜单按钮

取决于您的代码。如果希望菜单包含在所有活动中,则可以更轻松地从一个常见活动扩展所有活动,并添加菜单项。否则,我建议您创建一个公共静态类来存储onclick函数,并将您的上下文绑定到它。另外,当您不需要时,不要使用
getApplicationContext()
。使用活动context@ColonD如何在公共静态类中使用
findviewbyd(R.id.purchase\u order)
?如果可能的话,你能分享一个例子吗!因此,需要在JAVA活动本身中定义侦听器!对活动应该对要侦听的组件具有可见性。