2011-08-15 25 views
0

設置多個項目的onClick監聽器我想實現一個選擇列表。每個項目都是一個imageview。
當用戶點擊一個視圖,自定義對話框打開一個顯示在列表中56個ImageViews。
用戶可以點擊一個選擇它。
圖像視圖具有像這樣命名的圖像items_r1_c1 ... items_r56_c1。
我必須爲每個圖像視圖實現onClickListeners。
相反,我這樣做:陣列中的

private int i; // This is int the outer class. 
... 
private ImageView [] spec = new ImageView[56]; 
myView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //set up dialog 
       try { 
        final Dialog dialog = new Dialog(context); 
        dialog.setContentView(R.layout.myCustomList); 
        dialog.setTitle("Select one of 56"); 
        dialog.setCancelable(true); 
        dialog.show(); 

        String s = null; 

        //This is where I automate the ImageView object creation 
        for (i=2; i<=56; i++) { 

         s = "items_r"+Integer.toString(i)+"_c1"; 
         spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName())); 

         spec[i].setOnClickListener(new OnClickListener() {      
          @Override 
          public void onClick(View v) { 
           myItem.setItem(Integer.toString(i)); 
           if(i == 0) myItem.setItem("invalid"); 
           Log.e(tag, myItem.getItem()); 
           dialog.dismiss(); 

          } 
         }); 
        } 
       } catch (Exception e) { 
        Log.e(tag, e.toString()); 
       } 
      } 

但是我沒有得到我預期的行爲。
我在做什麼錯?什麼是這樣做的有效方式,而不是寫onClick監聽器。
謝謝。

回答

0

對於初學者我把for(...)循環調用之前dialog.show()。

要回答你的更一般的問題,看看方法ListView.setOnItemClickListener()http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener)。

你只需要在你的ListView註冊一個監聽器。當你點擊ListView中的一個項目時,你最終會在代碼void onItemClick(AdapterView<?> parent, View view, int position, long id)下。該位置將是單擊行的索引(對應於您的循環中的i)。

+0

謝謝。將進行更改。 – Brahadeesh