android – listview按位置获取项目视图

我有自定义适配器(基本适配器)的列表视图。 我想按位置从列表视图中查看。 我尝试了mListView.getChildAt(position) ,但它不工作。 我如何获得按位置的项目视图?

用这个 :

 public View getViewByPosition(int pos, ListView listView) { final int firstListItemPosition = listView.getFirstVisiblePosition(); final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; if (pos < firstListItemPosition || pos > lastListItemPosition ) { return listView.getAdapter().getView(pos, null, listView); } else { final int childIndex = pos - firstListItemPosition; return listView.getChildAt(childIndex); } } 

您只能从ListView中获取可见的View,因为ListView中的行视图是可重用的。 如果你使用mListView.getChildAt(0)你会得到第一个可见的视图。 该视图与来自位置mListView.getFirstVisiblePosition()适配器的项目相关联。

一旦ListView被绘制,更改外观/行视图的首选方法是更改​​ListView中绘制的数据(传递到Adapter的对象数组)的内容,并确保在getView()函数,然后通过调用重绘ListView

 notifyDataSetChanged(); 

编辑:虽然有办法做到这一点,如果你需要这样做的机会是做错了什么。 虽然我可以考虑一些边缘情况,但通常使用notifyDataSetChanged()和其他内置机制是一种方法。

编辑2:人们做的一个常见的错误是试图想出自己的方式来响应用户点击/selectListView中的行,如在这篇文章的评论之一。 有一个现有的方法来做到这一点。 就是这样:

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { /* Parameters parent: The AdapterView where the click happened. view: The view within the AdapterView that was clicked (this will be a view provided by the adapter) position: The position of the view in the adapter. id: The row id of the item that was clicked. */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //your code here } }); 

ListView有很多内置function,不需要为简单的情况重新发明轮子。 由于ListView扩展了AdapterView ,因此可以设置相同的侦听器,如上例中的OnItemClickListener 。

 Listview lv = (ListView) findViewById(R.id.previewlist); final BaseAdapter adapter = new PreviewAdapter(this, name, age); confirm.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub View view = null; String value; for (int i = 0; i < adapter.getCount(); i++) { view = adapter.getView(i, view, lv); Textview et = (TextView) view.findViewById(R.id.passfare); value=et.getText().toString(); Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); } } });