2013-07-23 70 views
2

假設我有一個ListView,其中的項目是包含三個按鈕的佈局。當用戶點擊5號項目的第二個按鈕時,我怎樣纔能有效地知道?在Android的ListView項目視圖中處理點擊事件

還有,第二個問題:如果我有一個適配器與該getView方法,我該如何處理activity類中的click事件而不是適配器?

乾杯,

+0

入住這可能會回答你的問題 http://stackoverflow.com/questions/17813864/android-listview-style-and-colors –

回答

4

實際上有很多方法可以做到這一點。

  • 您可以爲每個按鈕創建一個Click適配器,以知道它連接到哪個按鈕。
  • 您可以在點擊處理程序識別並採取行動的每個按鈕上放置一個唯一標記。
  • 您可以建立一個ArrayList,將每個Button鏈接到一個代碼,告訴點擊處理程序要做什麼......如同Alexander說的那樣,您可以爲處理按鈕的ListView創建一個自定義適配器。如果您使用此方法,那麼你需要在

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
        // Create all the Views, Buttons, etc 
    
        // Create the click handlers: 
        button1.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View v) { 
          doButtonOneClickActions(position); 
         } 
        }); 
    } 
    
    private void doButtonOneClickActions(int rowNumber) { 
        // Do the actions for Button one in row rowNumber (starts at zero) 
    } 
    

它,而取決於你的代碼(和你的首選編碼風格)的休息去哪個解決方案創造了onclick處理..

+0

謝謝尼爾。就是這樣,我很擔心編碼風格......我不知道哪個是最好的方法。謝謝你的答案。 –

+0

請讓我澄清一件事。如果我有一個帶有getView方法的適配器,如何處理activity類中的click事件而不是適配器?謝謝 –

+0

@DídacPérez只是在你的活動中創建一個監聽器,並在初始化之後將它傳遞給你的適配器,但在將它分配給listview之前。 – AlexSanchez

2

爲了這個目的,你應該更好地創造了ListView自定義適配器。然後覆蓋getView

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
//here you define your button's click events. 
//use position parameter to get actual position of current row layout in 
// the list 
} 
+0

感謝Four的答案。我實際上已經實現了一個自定義適配器和getView方法,但我確實需要知道如何以有效的方式處理列表視圖中的事件。 –

1

您應該創建自定義適配器並覆蓋getView(int position, View convertView, ViewGroup parent)方法,並在那裏引用您的按鈕並將它們設置爲onClickListeners。你有列表行的position,所以你有你需要的一切。

1

多好啊,你把三個按鈕放在列表項中,就像我現在正在做的一樣!我也在尋找一種編碼風格(不一定是解決方案)。無論如何,我將着眼於:

  1. 性能
  2. 重新可用性
  3. 鬆耦合(但高度內聚)

我將委託的點擊處理程序來應定義外部實例並使用以下線連接到適配器:

public class MyListAdapter extends BaseAdapter { 
    View.OnClickListener listener = null; 

    public View getView(...) { 
     buttonA.setOnClickListener(listener); 
     buttonB.setOnClickListener(listener); 
     buttonC.setOnClickListener(listener); 
    } 
    public void setItemClickListener(View.OnClickListener listener) { 
     this.listener = listener; 
    } 
} 

聽衆的工作是識別哪個按鈕單擊。更多的問題必須解決,例如,將數據從MyListAdapter傳遞給偵聽器,並將偵聽器代碼簡化爲應用程序邏輯的一部分。

相關問題