如何为多个活动全局定义特定布局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 框架而不是其组件?

如何为 Tailwindcss 全局更改默认、活动和悬停状态的链接颜色?

如何为特定活动禁用 Android 软键盘?

如何为类的每个实例创建实例特定的方法?

如何为代码中设置的参数设置布局单位?

如何为特定活动禁用Android Soft Keyboard?