Android ListView刷新问题

时间:2010-10-24 16:40:57

标签: android android-listview refresh

我在刷新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 个答案:

答案 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;

我不知道为什么会这样(只是试了几个小时的试验/错误)所以如果有人能够解释它会很棒。