android中的每个活动都会单击常用按钮

android中的每个活动都会单击常用按钮,android,Android,我的布局包含一个标题,我在每个活动中都包含了这个标题,在这个标题中有一个图像按钮。是否可以为此imageButton写入公共onClick事件???是。创建一个实现所需侦听器的单例类,并将该实例添加到每个屏幕上的按钮。您可以编写一个扩展OnClickListener和onClick方法的类。然后在每个活动的onCreate方法中,找到ImageButton并将其onClickListener设置为该类: MyOnclickListener implements OnClickListener {

我的布局包含一个标题,我在每个活动中都包含了这个标题,在这个标题中有一个图像按钮。是否可以为此imageButton写入公共onClick事件???

是。创建一个实现所需侦听器的单例类,并将该实例添加到每个屏幕上的按钮。

您可以编写一个扩展OnClickListener和onClick方法的类。然后在每个活动的onCreate方法中,找到ImageButton并将其onClickListener设置为该类:

MyOnclickListener implements OnClickListener {
  private Context context;
  public MyOnclickListener(Context context) {
    this.context = context;
  }

  @Override
  public void onClick(View arg0) {
    Intent intent = new Intent(context, MyActivity.class);
    context.startActivity(intent);
  }
}
在您的活动中:

protected void onCreate(...) {
  setContentView(...);
  ((ImageButton) findViewById(R.id.mybutton)).setOnClickListener(new MyOnclickListener(this));

}
编辑:对不起,当然可以

EDIT2:请参阅更新的代码以获取上下文参考。

cant0na和Juhani提供的答案很可能就是您正在寻找的答案(在cant0na的答案上有一个小注释)。如果您需要一个更自我维护和容错的解决方案,您可以定义自己的“小部件”,它处理自己的事件。为此,您需要:

  • 描述标题的xml布局文件
  • 一个自定义类,它将(自动)膨胀上述XML布局并管理任何“公共事件”
此解决方案的好处是,您不必在每个显示标题的活动中添加公共OnClickListener的新实例。您只需将标题添加到活动的布局XML(请参见下面的示例代码),而无需其他内容。万无一失的您还可以通过这种方式获得更“解耦”的代码(您的头不依赖于应用程序及其活动的任何实现细节)

缺点是,它是一个更复杂的解决方案,对于小项目来说似乎有点过分。如果您想在单击按钮时执行任何特定于活动的操作,那么保持此解决方案的“解耦”也有点棘手。您可能想在“代码> MyHeader < /code >类中结合“代码注入”来考虑“默认行为”。然后,代码注入将需要对活动中偏离默认行为的头类(注入onClick实现)进行进一步操作

示例header.xml

示例activity.xml



Hi,cant0na是否可以编写一个Intent myStuff=newintent(这个,myStuff.class);当我尝试这个时,我得到了一个错误,
OnClickListener
不是一个接口吗?你不需要
实现它而不是
扩展它吗?hi cant0na公共类MyComment实现OnClickListener{@Override public void onClick(View v){//TODO Auto-generated method stub Log.w(“Sa”,“ssd”);//Intent myStuff=newintent(ct,myStuff.class);//startActivity(myStuff);}是否可以在onClick事件中调用Intent???您需要对上下文进行引用才能使用Intent。我会就此回复您。您好,cant0na解决方案在一定程度上解决了我的问题,但在onClick事件中,我想调用一个新活动。我尝试调用**Intent I=new Intent();星触觉(i)**但它显示了一些错误,当我调试时,它显示“未找到源”。。。。
<com.dbm.widget.MyHeader
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

    <ImageView
        android:layout_width="60dp"
        android:layout_height="20dp"
        android:src="@drawable/myIcon"
        android:id="@+id/myButton" />

</com.dbm.widget.MyHeader>
package com.dbm.widget;

public class MyHeader extends LinearLayout implements OnClickListener {

    // Constructor.
    public MyButton() {
        ((ImageButton) findViewById(R.id.myButton)).setOnClickListener(this);
    }

    // OnClick event callback.
    public void onClick(View view) {
        // Do whatever you need to do here.
    }
}
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.dbm.MyHeader
        android:layout_width="match_parent"
        android:layout_height="20dp" />

    <!-- Your other content goes here -->

</LinearLayout>