0

我有一个数组,我需要访问依赖于 listView 中的哪个项目已被单击的元素。

发送到 getView() 方法的第一个 int 值,即 int arg0,这是被点击的数组元素的 ID?我是否需要从列表视图 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 值?

4

2 回答 2

2

ListView 中的每个项目都是一个视图,getView 负责为您的 Listview 创建这些视图。以下是 Android 文档的摘录:

public abstract View getView (int position, View convertView, ViewGroup parent)

**Parameters**

position:该项目在适配器的数据集中我们想要查看的项目的位置。 convertView: 如果可能的话,要重用的旧视图。注意:在使用之前,您应该检查此视图是否为非空且类型合适。如果无法将此视图转换为显示正确的数据,则此方法可以创建一个新视图。异构列表可以指定其视图类型的数量,以便此视图始终是正确的类型(参见 getViewTypeCount() 和 getItemViewType(int))。 parent : 此视图最终将附加到的父级

以下是有关如何为 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 高效。是一个很好的链接,描述了这种风格是如何工作的。您可以在此处从我的这种样式的实现中下载完整的示例

于 2013-02-28T02:00:25.613 回答
0

getView 与点击无关。它获取列表中第 N 个位置的视图,其中 N 是第一个参数。它只能由 ListView 本身调用,ListView 在滚动时使用它来初始化其视图。

于 2013-02-28T01:21:07.620 回答