2013-02-28 55 views
0

我有一个数组,我需要访问依赖于listView中的哪个项目被单击的元素。了解'getView()'

发送到getView()方法的第一个int值,即int arg0是否是已被单击的数组元素的ID?我需要从listview onClickListner分配ID吗?

public View getView(int arg0, View arg1, ViewGroup arg2) { 
} 

我认为以下两种overidden方法必须藏汉实现:

@Override 
public Object getItem(int arg0) { 
    return null; 
} 

@Override 
public long getItemId(int arg0) { 
    return 0; 
} 

目前我的应用程序只允许我,所以我相信它忽略访问数组的元素0(第一个元素)无论我的listview中的哪个项目被点击,其他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

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

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

**Parameters** 

位置:项目的适配器的数据集 项目,我们希望其考虑之内的位置。 convertView:旧的视图重用,如果 可能。注意:您应该在使用前检查此视图是否为非空,并检查适当类型的 。如果无法将此 视图转换为显示正确的数据,则此方法可以创建新视图。 异构列表可以指定它们的视图类型数量,因此这个视图始终是正确的类型(请参阅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

+0

非常感谢,一个非常明智的答案。这使得getView的功能更加清晰。 – user1352057 2013-02-28 19:10:55

+0

我很高兴它为你解决。你也可以upvote;) – 2013-03-01 06:09:31

0

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