データを永久に保持したい場合は、SQLite が適切なオプションです。
データを一時的にキャッシュしたい場合は、savedInstanceState バンドルがそのためにあります。Fragment と ListView の使用例を示します。
public static final String BUNDLE_CACHE = "ListFragment.BUNDLE_CACHE";
private ArrayList<ListItem> mCachedData;
private ListView mListView;
private ListItemAdapter mListAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((savedInstanceState != null) && savedInstanceState.containsKey(BUNDLE_CACHE)) {
this.mCachedData = savedInstanceState.getParcelableArrayList(BUNDLE_CACHE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
LinearLayout layout = (LinearLayout) inflater.inflate(
R.layout.layout_fragment, null);
this.mListAdapter = new ListAdapter(inflater.getContext(),
R.layout.item_list_topic_categories);
this.mListView = (ListView) layout.findViewById(R.id.listView);
this.mListView.setAdapter(this.mListAdapter);
this.mListView.setOnItemClickListener(this.mItemClickListener);
if (this.mCachedData == null) {
Log.d("onCreateView", "I make the request");
this.downloadData();
... // After download is finished, you put somewhere:
this.mCachedData = downloadedData;
} else {
Log.d("onCreateView", "Cool, the data is cached");
this.buildList(this.mCachedData);
}
return layout;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// You put the content of your list, which is this.mCachedData, in the state
outState.getParcelableArrayList(BUNDLE_CACHE, this.mCachedData);
}
また、一部のアプリで Web サービスを使用しています。savedInstanceState は、フラグメント間でビューを切り替えたときに Web サービスの呼び出しを繰り返さないようにするのに非常に役立ちます。このケースは、フラグメント ビューが破棄されてもフラグメントがまだ存在する場合に適用されます。ビューが再度作成されると、Web サービスから再度ダウンロードする代わりに、キャッシュされたデータが使用されます。
アクティビティからフラグメントに Parcelable を送信するには (biovamp の例に従って)、次を使用します。
Bundle args = new Bundle();
args.putParcelable("keyName", parcelableObject);
fragment.setArguments(args);
フラグメント内で、これを使用して Parcelable を取得します。
this.getArguments().getParcelable("keyName");
Parcelable を作成するには、たとえば次のチュートリアルを参照してください: http://techdroid.kbeanie.com/2010/06/parcelable-how-to-do-that-in-android.html
今、あなたは言いました:
次に、リストからアイテムをクリックすると、新しいアクティビティを開きたい
したがって、ListFragment から DetailsActivity を作成したい場合は、Intent を使用してデータを送信します。
ListItem item = ... // get your item data
intent.putExtra("keyItem", item);
そして、次を使用して、新しく作成した DetailsActivity 内に取得します。
Bundle extras = getIntent().getExtras();
if (extras !=null) {
ListItem value = (ListItem) extras.getParcelable("keyItem");
}