2013-07-09 91 views
0

我爲ArrayAdapter定義了一個自定義視圖(xml),其中添加了Button。我想爲每行Button創建一個OnClickListener,但不創建自定義適配器。這是可能的,還是Android迫使我爲我的ListView創建自定義ArrayAdapter使用ArrayAdapter中的按鈕進行自定義視圖

下面是我在做什麼的一個片段:

glAdapter = new ArrayAdapter<Group>(getActivity(), R.layout.fragment_grouprow, R.id.groupRowText, ListOfGroups); 
ListView groupListView = (ListView)mainView.findViewById(R.id.listViewGroupMain); 
groupListView.setAdapter(glAdapter); 
groupListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // Call function 
     } 
}); 

現在,我想在我的自定義視圖中添加了ButtonOnClickListener

+0

發佈適配器的代碼,這取決於您的實現。您可以直接在適配器或對象類中處理clicklistener。 – marshallino16

+0

感謝您的回覆。我只是添加了一個代碼片段。 – LaVomit

+0

@LaVomit你需要重寫'getview'。最好有一個自定義適配器 – Raghunandan

回答

1

您必須執行您自己的適配器並在getView()方法集OnClickListener在您的按鈕上。這裏舉個例子:

public class CustomAdapter extends ArrayAdapter<Integer> { 
    private ListView listView; 

    public CustomAdapter(Context context, int textViewResourceId, Integer[] objects, ListView listView) { 
     super(context, textViewResourceId, objects); 
     this.listView = listView; 
    } 


    static class ViewHolder { 
     TextView text; 
     Button btn; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Integer color = getItem(position); 

     View rowView = convertView; 

     if (rowView == null) { 
      LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.list_view_row, parent, false); 
      ViewHolder h = new ViewHolder(); 
      h.text = (TextView) rowView.findViewById(R.id.item_text); 
      h.btn = rowView.findViewById(R.id.btn); 
      rowView.setTag(h); 
     } 

     ViewHolder h = (ViewHolder) rowView.getTag(); 

     h.text.setText(color); 
     h.indicator.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // DO what you want to recieve on btn click there. 
      } 
     }); 

     return rowView; 
    } 
} 

ViewHolder在這裏進行優化。你可以閱讀關於這個there

+0

關閉再次編寫一個自定義'ArrayAdapter',我之前刪除了hehehe。謝謝!! – LaVomit

+0

不客氣。 – Divers

相關問題