我已经为 ListView
的 ArrayAdapter
定义了一个自定义 View (xml),它添加了一个 Button
。我想为每行的 Button
创建一个 OnClickListener
,但不创建自定义适配器。这可能吗,还是 Android 强制我为我的 ListView
创建自定义 ArrayAdapter
?
这是我正在做的事情的 fragment :
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 } });
现在我想在自定义 View 中为 Button
添加一个 OnClickListener
。
最佳答案
您必须实现自己的适配器,并在按钮上的 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 .
关于java - ArrayAdapter 中带有按钮的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545060/