刷新我的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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top