【发布时间】:2016-08-01 08:09:21
【问题描述】:
我对数据绑定中的列表视图有疑问,因为我不知道如何在视图模型中设置自定义ArrayAdapter,以及如何在视图模型中添加onItemClick 侦听器。有人可以展示如何做到这一点?互联网上关于这方面的信息真的很少。
【问题讨论】:
标签: java android listview binding
我对数据绑定中的列表视图有疑问,因为我不知道如何在视图模型中设置自定义ArrayAdapter,以及如何在视图模型中添加onItemClick 侦听器。有人可以展示如何做到这一点?互联网上关于这方面的信息真的很少。
【问题讨论】:
标签: java android listview binding
只需为 ListView 设置适配器。 R.id.listview 显然必须引用您在布局中定义的 ListView,R.layout.listviewrow 必须引用行应该具有的布局。此外,在 ListView 中添加一个新的 onItemClickListener 实例。
MyCustomArrayAdapter adapter = new MyCustomArrayAdapter(getActivity(), R.layout.listviewrow);
ListView lv = (ListView) getActivity().findViewById(R.id.listview);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//perform desired action here
}
} );
适配器本身应该如下所示:
public class MyCustomArrayAdapter extends ArrayAdapter<Item> {
public MyCustomArrayAdapter(Context context, int resource) {
super(context, resource);
}
public MyCustomArrayAdapter(Context context, int resource, List<Item> items) {
super(context, resource, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(resource, null);
}
Item item = getItem(position);
if (item != null) {
TextView tvFirstName = (TextView) v.findViewById(R.id.firstName);
TextView tvLastName = (TextView) v.findViewById(R.id.lastName);
if (tvFirstName != null) {
tvFirstName.setText(item.getFirstName());
}
if (tvLastName != null) {
tvLastName.setText(item.getLastName);
}
}
return v;
}
【讨论】: