1

Windows Phone 8 から Android に移植するアプリケーションを作成しています。Android 開発に関する私の知識は限られています。

ナビゲーションドロワーを使用しています。私はすでにいくつかの実装を行っています。私が直面している問題/問題は、それらを切り替えるときにビューの状態を復元することです。

私はarcgis android sdkを使用しています。ビュー 1: インターネットから取得したリストビューの地理空間データ。ビュー 2: あなたの場所とビュー 1 で選択 (タップ) された場所を示すマップ ビュー 3: ビュー 1 からアイテムを取得する半径を増減するための設定ビュー。

ビューを切り替えるとき、ビューの状態を維持したい (状態を復元する)。

このようなシナリオでのベスト プラクティスは何ですか? 現在、フラグメントを使用しています。問題は、フラグメントを切り替えるときに onSaveInstanceState が呼び出されないことです。

これはフラグメントを切り替えるための私のコードですが、まったくうまく機能していません:)

private void selectItem(int position) {
    // Create a new fragment and specify the planet to show based on position
    Fragment f;
    FragmentTransaction ft = fragManager.beginTransaction();
    switch(position) {
    case 0: 
        if((f = fragManager.findFragmentByTag("home")) == null) {
            f = Fragment.instantiate(this, HomeFragment.class.getName());
            f.setRetainInstance(true);
            ft.add(R.id.content_frame, f, "home");
        } else {
            ft.attach(f);
        }
        break;
    case 1:
        if((f = fragManager.findFragmentByTag("map")) == null) {
            f = Fragment.instantiate(this, MapFragment.class.getName());
            f.setRetainInstance(true);
            ft.add(R.id.content_frame, f, "map");
        } else {
            ft.attach(f);
        }
        break;
    case 2:
        if((f = fragManager.findFragmentByTag("settings")) == null) {
            f = Fragment.instantiate(this, SettingsFragment.class.getName());
            f.setRetainInstance(true);
            ft.add(R.id.content_frame, f, "settings");
        } else {
            ft.attach(f);
        }
        break;
    }
    ft.commit();
    // Highlight the selected item, update the title, and close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(tabs[position]);
    mDrawerLayout.closeDrawer(mDrawerList);

}
4

1 に答える 1

0

フラグメント状態を復元するためのサンプル コードを次に示します。

public void addFragments(Fragment fragment, 
        boolean addToBackStack, String tag) {

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();

    if (addToBackStack) {
        ft.addToBackStack(tag);
    }
    ft.replace(R.id.content_frame, fragment);
    ft.commit();
}

ここで fragment= 置き換えたいフラグメント。

于 2014-03-29T04:17:08.860 に答える