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

问题描述 投票:-1回答:2

我需要在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);
    }
});
java android android-activity
2个回答
1
投票

是和否。

您可以创建一个BaseActivity,它具有必须为每个按钮单击执行的通用逻辑。

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

为了使代码更易读(避免使用implementing listener / setOnclickListener),您可以使用ButterKinfe,并为OnClick()注释创建方法,并在BaseActivity中调用该方法。


-1
投票

您基本上想要做的是调用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时。

© www.soinside.com 2019 - 2024. All rights reserved.