我在刷新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
变为空白。
答案 0 :(得分:1)
我认为你的MatrixCursor实际上是空的。当您旋转手机时,您知道活动已被破坏。因此,savedinstanceState包可能不为null,但MatixCursor不会重新初始化。是的,它是静态的,但我有一种感觉,如果有机会它没有加载到同一个类加载器......那么静态不会太可靠。
有一种最尴尬的方法:
onRetainNonConfigurationInstance()
我认为这将有助于您解决此案例。因此,如果您在那里返回MatrixCursor实例,则可以在稍后调用onCreate()时使用getLastNonConfigurationInstance()来读取数据。它不能保证被调用,因此您仍然需要处理没有存储状态的情况。希望这会有所帮助。
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();
}
答案 1 :(得分:1)
我设法通过contactlist
静态来修复它:
private static ListView contactlist = null;
我不知道为什么会这样(只是试了几个小时的试验/错误)所以如果有人能够解释它会很棒。