0

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

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() 函数并在函数中进行切换/案例或类似的东西),但它不起作用。

我对每一个想法都很满意!谢谢

/编辑

这里是 .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" />
4

2 回答 2

3

使您的 Activity 实现OnClickListener,然后按onClick如下方式处理事件:

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.img1:
        ...
        break;
    case R.id.img2:
        ...
        break;
    }
}
于 2013-05-12T07:33:39.703 回答
0
  1. 你应该让你的Activity/Fragment实现OnClickListener.
  2. 当您这样做时,您将不得不覆盖该onClick特定活动/片段中的方法。
  3. 在图像上设置onClickListeners 如下:

    img_1.setOnClickListener(YourActivity.this);
    
  4. 然后在该onClick方法中,您可以按如下方式放置 switch 案例或 if else if 案例

    @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;
        }
    }
    
于 2013-05-12T07:33:07.300 回答