理解'getView()'

时间:2013-02-28 01:13:34

标签: java android

我有一个数组,我需要访问依赖于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值?

2 个答案:

答案 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用于在滚动时初始化其视图。