为ListView强制onSizeChanged

我有一个listviewdynamic分配不同的数据集。 这工作正常。 我也使fastScrollEnabled是真实的。 为了更新sectionIndexer,我需要调用

list.setFastScrollEnabled(false); list.setFastScrollEnabled(true); 

问题是索引显示在左上angular,这是一个知道的问题。 作为解决方法,每当我改变方向索引再次正确显示。 为了testing这个我已经实现了一个自定义ListView,观察是如果我可以强制listView调用onSizeChanged()它会正常显示。

现在的问题是:

是否有可能强制listView调用onSizeChanged()方法? 如果是的话我们怎么能做到这一点。

有没有人知道onSizeChanged()被调用时的条件。 当方向改变,我们可以想到的任何其他条件时,这绝对是被调用的。

Solutions Collecting From Web of "为ListView强制onSizeChanged"

在ListView上强制onSizeChanged我做到以下几点:

 myList.getLayoutParams().height = myList.getHeight() + 1; myList.requestLayout(); 

只要确保不要每次调用+1或-1,因为列表可能会超出指定的大小,因此使用标志在+1和-1之间切换。

试试:

 listView.requestLayout(); 

这是我的解决scheme:
我用构造函数(Context,AttributeSet)子类化GridView:
(这对我来说必须在一个单独的文件类上完成)
并覆盖了SizeChanged方法

 MyGrid.java public class MyGrid extends GridView { public void MyGrid(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO Auto-generated method stub // Here I call my custom functions to prepare layout of my custom listview super.onSizeChanged(w, h, oldw, oldh); } } 

在类Activity上比使用GridView,
我已经overStart onStart方法
(在OnCreate之后和onRestart之后调用(当你来自另一个活动时))

 MyActivity.java public class MyActivity extends Activity { onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(...) ... } .... protected void onStart() { // TODO Auto-generated method stub // call db and create cursor // 'mygridview' = findbyid MyGrid // (declared on xml like '<packagepath>'.mygrid // setadapter with my costom adapeter // **HERE THE CALLED ONSIZECHANGED** // I make test proper for my app // (there is a simple test) if ('mygridview'.getMeasuredHeight() > 0) { // I use the same width and height for new and old measures // because for me that is right 'mygridview'.onSizeChanged(gw.getWidth(), gw.getHeight(), gw.getWidth(), gw.getHeight()); } super.onStart(); } } 

采用这种方法,我可以随时调整网格大小。 我希望你有帮助。