0

リストのListView各要素には独自の詳細ビューがあります。各詳細ビューには「詳細ビュー」もあります。リスト内のアイテムがクリックされると、アイテムの ID を最初の詳細ビューに送信し ( を使用Intent)、それを使用してデータをフェッチします。ただし、2 番目の詳細ビューに移動して戻ると、アクティビティは をスローします。これはNullPointerException、(もちろん)getIntent().getExtras()が空であるためです。

アプローチを変更せずにこの問題を解決する方法はありますか? そうでない場合、これを解決するにはどうすればよいですか?ありがとう。

4

1 に答える 1

1

1 つのアプローチは、それらのエクストラを詳細ビューに送信することです。その後、戻るときにそれらのエクストラを送り返すので、アクティビティ (listView を持つもの) がクラッシュすることはありません。

次のようになります。

baseActivity.java (これは ListView のものです)

Intent intent = new Intent(this, detailView.class);
intent.putExtra("nameHere1", valueHere1);
intent.putExtra("nameHere2", valueHere2);
//just put extra's here
startActivity(intent);
finish();

そして、detailView.java では、onBackPressed で次のようなことを行います。

Intent intent = new Intent(this, baseActivity.class);
intent.putExtra("nameHere1", getIntent().getExtra("nameHere1"));
intent.putExtra("nameHere2", getIntent().getExtra("nameHere2"));
//just put extra's here
startActivity(intent);
finish();

別の解決策はfinish();、baseActivity を呼び出さないことです。アクティビティは次のようになります。

baseActivity.java (これは ListView のものです)

Intent intent = new Intent(this, detailView.class);
intent.putExtra("nameHere1", valueHere1);
intent.putExtra("nameHere2", valueHere2);
//just put extra's here
startActivity(intent);

detailView.java は、onBackPressed で次のようなことを行います。

finish();

このアプローチでは、baseActivity を「kill」しないため、detailView が画面に表示されたときにその値がそのまま残ります。ただし、このアプローチは不要な RAM を占有するため、私はあまり支持しません。

于 2014-05-19T12:41:26.133 に答える