2013-07-09 52 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

相关问题