9

我在所有 6 项活动中都有 7 个按钮。所有 6 个按钮在所有活动中都具有相同的功能。如何为这 6 个按钮执行常见的单击事件侦听器。

4

7 回答 7

12

您可以像这样创建一个实现 View.OnClickListener 的新类:

public class MyClickListener implements View.OnClickListener {
    @Override
    public void onClick(View view) {
         // TODO handle the click   
    }
}

然后,在您的所有活动中,您可以像这样设置点击侦听器:

button.setOnClickListener(new MyClickListener());

您甚至可以将上下文保存在类中以显示 Toast 等。

public class MyClickListener implements View.OnClickListener {
    private Context context;

    public MyClickListener(Context context) {
        this.context = context;
    }

    @Override
    public void onClick(View view) {
         Button button = (Button) view;
         Toast.makeText(this.context, button.getText().toString(), Toast.LENGTH_SHORT).show();
    }
}
于 2013-06-01T07:56:11.793 回答
3

有这样的课:

public class OnClickMaker{
    public static View.OnClickListener getOnClick(){
         return new View.OnClickListener(){
              public void on click(View v){
                  //do stuff
              }
          };
    }
}

然后在你的另一堂课上,这样做

button.setOnClickListener(OnClickMaker.getOnClick());
于 2013-06-01T07:37:18.200 回答
2

在上面给出的 Sagar 的答案中添加更多的话。

假设:

正如您所说,您的 6 个活动中有 7 个按钮,我假设所有 7 个按钮都具有相同的功能/代码。

解决方案:

第 1 步:包含android:click="btnFirstClick"<Button>您的 XML 布局中。

第 2 步:通过扩展 Activity 定义抽象 BaseActivity 类,并包含与您在android:onClick属性中给出的相同名称的方法。

abstract public class BaseActivity extends Activity {

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
   }

   public void btnFirstClick(View v) {
   }

   public void btnSecondClick(View v) {
   }

   .....
   .....
  // same for other buttons
}

第 3 步:现在将此 BaseActivity 扩展到您的所有 6 个活动。

例如:

public class FirstActivity extends BaseActivity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState); 
           setContentView(R.layout.layout_first);
    }
}
于 2013-06-01T07:59:29.497 回答
0

你可以这样做

创建基础活动

class BaseActivity extends Activity{
    public void onSpecificEvent(View v){
        // do your tasks
    }
}

现在扩展您的活动

class Activity1 extends BaseActivity
class Activity2 extends BaseActivity

在 xml 中您需要在哪些按钮中实现 onClick 使用

android:onClick="onSpecificEvent"
于 2013-06-01T07:59:03.750 回答
0

在一个类中创建一个函数,并将该类放在所有其他类所在的同一个包中。只需在 6 个 onclicklisteners 中调用该函数即可。

于 2013-06-01T07:23:06.497 回答
0

如果您和我一样处于相同的情况,我有一个线性布局,其中包含不确定数量的按钮(动态生成),并且您希望所有按钮都有一个通用侦听器(例如注销其文本),您可以这样做这个

for (int i = 0; i < linearLayout.getChildCount(); i++)
    {
        final Button b = (Button) linearLayout.getChildAt(i);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Commons.log(b.getText().toString());
                //your other code here
            }
        });
    }

现在线性布局的所有子(按钮)都有相同的点击监听器

于 2015-02-05T09:28:35.350 回答
0

你可以这样做,

将点击事件放在 XML 文件中android:click="clickMe"

Activity说创建这个函数

public void clickMe(View view) {
...//You handling code
}

并通过您的所有活动扩展此活动。

于 2013-06-01T07:37:40.507 回答