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

contactlistさて、静的にすることでなんとか修正できました:

 private static ListView contactlist = null;

なぜこれが機能したのかわかりません(数時間試行錯誤しただけです)ので、誰かがそれを説明できればそれは素晴らしいことです.

于 2010-10-26T17:47:39.407 に答える
1

あなたの MatrixCursor は実際には null だと思います。あなたが知っているようにあなたが電話を回転させるとき、活動は破壊されます. そのため、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();
}
于 2010-10-25T06:47:22.503 に答える