android |对话框中的多个onclicklistener

时间:2013-05-12 07:22:41

标签: android dialog onclicklistener

在我的活动中,我开始一个简单的对话框。

final Dialog myDialog = new Dialog(this);
myDialog.setContentView(R.layout.testing);
...

我的testing.xml布局除了10个ImageView之外什么都没有,id为'1'到'10'。

我希望每个ImageView都可以点击并执行某些操作。 定义.xml文件中的onclick()方法不起作用,因为在查看对话框时找不到方法。

我得到它的唯一方法是:定义10个onclick-listeners:

ImageView img_1 = (ImageView) myDialog.findViewById(R.id.1);
ImageView img_2 = (ImageView) myDialog.findViewById(R.id.2);
...

img_1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
  execute_funtion(1);
  myDialog.cancel();
}
});

img_2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
  execute_funtion(2);
  myDialog.cancel();
}
});

...

然而,这是非常糟糕的代码,我有10次几乎相同的行。

所以我的问题是:如何使用干净的代码完成这项工作? 我想过一个多个onclicklistener(覆盖onClick()函数并在函数或类似的东西中创建一个switch / case),但是它没有用。

我为每个想法感到高兴! 感谢

/ EDIT

这是.xml文件的片段

<ImageView
  android:id="@+id/1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="2dp"
  android:onClick="myFunction"
  android:src="@drawable/ic_launcher" />

2 个答案:

答案 0 :(得分:3)

让您的活动实施OnClickListener,然后处理onClick事件,如下所示:

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.img1:
        ...
        break;
    case R.id.img2:
        ...
        break;
    }
}

答案 1 :(得分:0)

  1. 您应该让Activity / Fragment实施OnClickListener
  2. 当您这样做时,您必须覆盖该特定活动/片段中的onClick方法。
  3. 在图像上设置onClickListener,如下所示:

    img_1.setOnClickListener(YourActivity.this);
    
  4. 然后在onClick方法中,您可以设置一个switch case或if else if case,如下所示

    @Override  
    public void onClick(View v)
    {   
        if(v==img_1) {  
              //do this  
        } else if(v==img_2) {  
            //do that  
        }...  
    }
    

    @Override
    public void onClick(View v)
    {
        switch (v.getId()) {
            case img_1.getId(): // do this
                break;
            case img_2.getId(): // do that
                break;
            .
            .
            .
            default : break;
        }
    }