我有一个数组,我需要访问依赖于listView中的哪个项目的元素。
发送到getView()方法的第一个int值,即int arg0,这是已单击的数组元素的ID?我是否需要从listview onClickListner分配ID?
public View getView(int arg0, View arg1, ViewGroup arg2) {
}
我认为必须实施以下两种重叠方法:
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
目前我的应用程序只允许我访问数组的元素0(第一个元素),所以我相信无论点击列表视图中的哪个项目,它都会忽略其他19个元素。
private List<GeoName> names = new ArrayList<GeoName>();
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
GeoName location = this.names.get(arg0);
Location l = location.getGeometry().getLocation();
Latt = l.getLat();
Longg = l.getLng();
从上面的代码中,当调用name.get()'方法时,是否应该为'arg0'自动分配元素ID值?
答案 0 :(得分:2)
ListView中的每个项目都是一个视图,getView负责为Listview创建这些视图。以下是Android文档的摘录:
public abstract View getView (int position, View convertView, ViewGroup parent)
**Parameters**
position:项目在适配器数据集中的位置 我们想要的视图项目。 convertView:要重用的旧视图,如果 可能。注意:您应该检查此视图是否为非null和 使用前适当的类型。如果无法转换此信息 要查看显示正确的数据,此方法可以创建新视图。 异类列表可以指定它们的视图类型数量,以便这样做 此视图始终是正确的类型(请参阅getViewTypeCount()和 getItemViewType(INT))。 父级:此视图的父级 最终被附加到
以下是有关如何为ListView实现侦听器的示例代码段:
lv = (ListView) findViewById(R.id.listview);
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array));
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View v, int position, long id)
{
AlertDialog.Builder adb = new AlertDialog.Builder(
ListviewOnclickExample.this);
adb.setTitle("ListView OnClick");
adb.setMessage("Selected Item is = "+ lv.getItemAtPosition(position));
adb.setPositiveButton("Ok", null);
adb.show();
}
});
我建议您使用ConvertView和ViewHolder样式使Listview有效。 Here是描述此样式如何工作的好链接。您可以从我执行此样式here
中下载完整的示例答案 1 :(得分:0)
getView与点击无关。它获取列表中第N个位置的视图,其中N是第一个参数。它应该只由ListView本身调用,它由ListView用于在滚动时初始化其视图。