Android ListView の更新の問題
-
25-09-2019 - |
質問
更新中に奇妙な問題が発生します 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が実際に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();
}