2009-10-26 125 views
2

后更新“刷新”和“setSelection”的方法在我的ListView中,我选择一个项目以“添加收藏夹”,我必须做一些东西的工作,我再次填充数据刷新列表,然后我执行OnScrollListener使用setSelection(firstVisibleItem)来设置列表显示右项上添加。在更新ListView(Android)

有没有更好的方法来做到这一点。我的意思是像mCursor.requery()或类似的android APIs?或者任何建议的方式?

+0

我感兴趣的是这个问题的答案;我也有类似的问题 – I82Much 2009-10-26 15:12:46

回答

1

嗯,requery()是重新填充由SimpleCursorAdapter支持的ListView的首选方法。在ListView上调用setSelection()似乎是确保所需项目可见的好方法。我不清楚OnScrollListener与这些有什么关系。

+0

我也必须考虑OnScrollListener! :-) 但我猜**这里的含义是,通过使用此侦听器并记住通过'firstVisibleItem'来的最后一个值,并在重新定位时使用** this **值,更新数据后所有内容看起来都一样! – Zordid 2010-02-25 12:48:18

1

如果你只是打电话setSelection(),这将使你的项目显示不自然地。例如,如果您的项目在屏幕的“中间”处可见并且其位置是8.当您添加收藏夹,刷新数据,setSelection(8)项目将显示在屏幕的“顶部”(而是在'中间')。

所以,那为什么我用OnScrollListener得到firstVisibleItem并且用这个值来设置位置。它使项目自然显示。这是函数:

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){} 

我认为它与任何人谁在ListView更新数据经常发生。我希望有人能分享这个问题的经验。

1
mListActivity.runOnUiThread(
    new Runnable() { 
     public void run() { 
      x.setSelection(x.getCount()); 
     } 
    } 
); 
5

要显示所选择的项目,而在中间比在我ListView顶部,我用setSelectionFromTop()

getListView().setSelectionFromTop(pos, getListView().getHeight()/2); 

当然,你可以额外减去一半的单元布局的高度,从分割上面来正确地选择中间的选择。

+0

将高度除以2不会使项目居中,而是将项目的顶部开始放到一半,从而给出将项目放在列表中的感觉。我通常减去半行高度,或者如果视图高度很难建立,则除以2.5或3。 – Lmickos 2013-12-05 10:19:11

1

这是大家都在找什么:

onResume() 
{ 
    refresh_your_data() 
    if(listview.getadapter()==null) 
    // create the adapter 
    } 
    else 
    { 
     adapter.notifydatasetchanged(); 
    } 
}