Android的ListView的刷新问题
-
25-09-2019 - |
题
刷新我的ListView
时,我得到一个奇怪的问题,直到设备旋转,然后当刷新一遍它去完全空白的它工作正常。这只能通过再次旋转设备(如在onCreate()
也刷新)但随后每当其再次刷新它变为空白固定。问题仍然存在,直到应用程序被重新启动。
修改强>
一些代码:
private ListView contactlist = null;
private static MatrixCursor matrixcursor = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
contactlist = (ListView) findViewById(R.id.contactlist);
if (savedInstanceState == null) {
matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
} else {
contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
}
}
此工作正常,但每当:
contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
被onCreate()
后调用和设备已被后旋转ListView
变为空白。
解决方案 2
那么我管理通过使contactlist
静态修复它:
private static ListView contactlist = null;
我不知道为什么这个工作(只是做了几个小时的试用/错误),所以如果任何人都可以解释这将是巨大的。
其他提示
我觉得你的MatrixCursor实际上是空的。当你因为你知道旋转手机的活动被破坏。所以savedinstanceState束可能不为空,但MatixCursor则没有得到重新初始化。是的,它的静态的,而是我有,如果它的一些机会,它不是在同一个类加载器加载的感觉......好静态不会太可靠。
有一个是被最笨拙命名方法:
onRetainNonConfigurationInstance()
我想这会帮助你解决这个情况。所以,如果你到的onCreate()使用getLastNonConfigurationInstance以后的调用在那里,你可以回到你的MatrixCursor实例()读取数据退了出去。它不能保证被调用,所以你仍然需要处理,你有没有存储的状态的情况。希望这有助于。
private ListView contactlist = null;
private MatrixCursor matrixcursor = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
contactlist = (ListView) findViewById(R.id.contactlist);
matrixcursor = (MatrixCursor)getLastNonConfigurationInstance();
if (matrixcursor == null) {
matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
} else {
contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
}
}
public MatrixCursor onRetainNonConfigurationInstance() {
return matrixcuror;
}
public MatrixCuror getLastNonConfigurationInstance() {
return (MatrixCursor) super.getLastNonConfigurationInstance();
}
不隶属于 StackOverflow