0

刷新时我遇到了一个奇怪的问题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变为空白。

4

2 回答 2

1

我认为你的 MatrixCursor 实际上是空的。当您旋转手机时,您知道活动已被破坏。所以 savedinstanceState 包可能不为空,但 M​​atixCursor 不会重新初始化。是的,它是静态的,但我有一种感觉,如果它有可能没有加载到同一个类加载器中……那么静态不会太可靠。

有一个方法名字最别扭:

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();
}
于 2010-10-25T06:47:22.503 回答
1

好吧,我设法通过制作contactlist静态来修复它:

 private static ListView contactlist = null;

我不知道为什么会这样(只是试错了几个小时)所以如果有人能解释一下那就太好了。

于 2010-10-26T17:47:39.407 回答