我有一个listview,可以动态分配不同的数据集。这很好用。我也使fastScrollEnabled成为现实。对于要更新的sectionIndexer,我需要调用
list.setFastScrollEnabled(false);
list.setFastScrollEnabled(true);
问题是索引显示在左上角,这是一个已知问题。作为解决方法,每当我更改方向时,都会再次正确显示索引。为了测试这个我已经实现了一个自定义ListView,观察是如果我可以强制listView调用onSizeChanged()它将正确显示。
现在的问题是:
是否可以强制listView调用onSizeChanged()方法?如果是,我们怎样才能做到这一点。
有人知道调用onSizeChanged()时的条件。当方向发生变化时,我们可以想到任何其他条件。
答案 0 :(得分:7)
要在ListView上强制onSizeChanged,我会执行以下操作:
myList.getLayoutParams().height = myList.getHeight() + 1;
myList.requestLayout();
请确保每次都不要调用+1或-1,因为列表可能只是过大地指定了大小,因此使用标记在+1和-1之间切换。
答案 1 :(得分:0)
尝试:
listView.requestLayout();
答案 2 :(得分:0)
这是我的解决方案:
我用构造函数(Context,AttributeSet)子类化了GridView:
(这对我来说必须在一个单独的文件类上完成)
并覆盖onSizeChanged方法
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,
我已经超越了启动方法
(在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();
}
}
通过这种方法,我可以随时调整网格大小。 我希望你能提供帮助。