2013-05-12 24 views
0

我的活動內我開始一個簡單的對話框。android |多個onclicklistener在對話框中

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

我的testing.xml佈局只包含10個ImageViews,ID是'1'到'10'。

我希望每個ImageView都是可點擊的並且可以做某些事情。 在.xml文件中定義onclick()方法不起作用,因爲在查看對話框時無法找到方法。

我得到了它的工作是以下的唯一方法:定義10的onclick-聽衆:

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(overwride onClick()函數,並在函數或類似的東西做一個開關/案例),但它不工作。

我很高興每個想法! 感謝

/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" /> 
+0

你是什麼意思**定義在.XML的onclick()梅索德**。發佈該.xml文件以及 – CRUSADER 2013-05-12 07:27:40

+0

我添加了它,感謝您的關注! 單擊圖像時,找不到「myFunction()」。 – user1885484 2013-05-12 07:34:44

+0

正如你所提到的那樣使用開關盒'overwride onClick()函數,並在函數或類似的東西中做一個開關/盒'。但首先重命名你的ID。它不允許使用數字標識,而是使用img1,img2。 – andrew 2013-05-12 07:37:50

回答

3

讓您的活動實施OnClickListener,然後處理onClick事件象下面這樣:

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

其實你不能將id定義爲數字。 – andrew 2013-05-12 07:41:43

+0

你是對的!我會編輯我的答案。 – Bolton 2013-05-12 07:52:18

0
  1. 的片段你應該讓你的Activity/Fragment實現OnClickListener
  2. 當你這樣做時,你將不得不重寫該特定活動/片段中的onClick方法。
  3. 設置在圖像onClickListener S作爲如下:

    img_1.setOnClickListener(YourActivity.this); 
    
  4. 然後在onClick方法,你可以把一個開關的情況下或如果否則,如果情況如下

    @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; 
        } 
    } 
    
+0

對不起,第一段代碼由於某種原因未格式化! – Antrromet 2013-05-12 07:33:48

+0

「case img_1.getId():」不起作用,但它起作用時,我寫 「案件R.id.1」 謝謝! – user1885484 2013-05-12 08:11:47