2015-05-26 72 views
1

我有很多按編程方式創建的按鈕,每個按鈕對應於某個特定的操作,我需要能夠根據哪個按鈕識別和檢索用戶輸入被點擊。用戶界面是如下:如何在自動創建的多重按鈕上管理OnClickListener

enter image description here

我有一個像70項喜歡那些人。

我讀過

Dynamically creating Buttons and setting onClickListener

Implementing OnClickListener for dynamically created buttons in Android

但我不知道什麼是正確的做法。例如,如果用戶點擊Button文本現在被設置爲...,我必須能夠檢索EditText的值,並且知道該分鐘數量對應於Andar carrito compra

tag指定給Button是正確的,以便識別屏幕上的索引,然後在查看層次結構中查找並檢索EditText Value?

這是我到目前爲止的代碼:

for (int i = 1; i < types.length; i++) { 

     // ... more views created 
     // ...... 

     Button enterBt2 = new Button(this); 
     // Set layout params and stuff for the button 
     enterBt2.setTag(i); 
     enterBt2.setOnClickListener(getOnClickDoSomething(enterBt2)); 
     // .... 
} 

而且OnClickListener

View.OnClickListener getOnClickDoSomething(final Button button) { 
    return new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.e(TAG, "O " + ExerciseRecord.TYPE.values()[((int) button.getTag())]); 
      // Obtain the value of the EditText with 
      LinearLayout ll = (LinearLayout) button.getParent(); 
      ll.getChildAt(0); //The EditText 
     } 
    }; 
} 

這將是它的最佳方法是什麼?

回答

4

將是正確的標籤分配給按鈕,以便查明 屏幕上的指數,再上去視圖層次結構和 檢索的EditText價值?

這是一個選項。或者你可以有一個實現接口的類,添加一個構造函數以String作爲參數。例如。

public class MyOnClickListener implements View.OnClickListener { 
    final String mValue; 
    public MyOnClickListener(String value) { 
      mValue = value; 
    } 

    public void onClick(View v) { 
     Log.e(TAG, "O " + mValue); 
     // Obtain the value of the EditText with button.getParent().... 
    } 
} 
1

這是一種可能的方法。 視圖上的標籤本身就是一個對象,理論上,您可以將編輯文本作爲標籤,這樣您可以更容易地檢索它,但是您可能會遇到一些內存泄漏問題 - 我自己也是這樣做的。

另一種方式,我認爲這是一個矯枉過正的做法,是創建一個Button的子類並添加您需要的任何信息。

相關問題