4

これは、ナビゲーション ドロワーを使用してフラグメントを表示する方法です。

private void displayView(int position) {
            // update the main content by replacing fragments
            Fragment fragment = null;
            switch (position) {
            case 0:
                fragment = new Fragment0();
                break;
            case 1:
                fragment = new Fragment1();
                break;
            case 2:
                fragment = new Fragment2();
                break;
            case 3:
                fragment = new Fragment3();
                break;
            case 4:
                fragment = new Fragment4();
                break;
            case 5:
                fragment = new Fragment5();

                }

            default:
                break;
            }

            if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment)
                        .addToBackStack(null)
                        .commit();

                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                setTitle(navMenuTitles[position]);
                mDrawerLayout.closeDrawer(drawerll);
            } else {
                // error in creating fragment
                Log.e("MainActivity", "Error in creating fragment");
            }
        }

ユーザーが次の場所に移動したとします。Fragment 2-> Fragment 5-> Fragment3.

ユーザーがクリックすると、各フラグメントに andback buttonが必要です。その特定の場所に移動すると、フラグメントのが表示されます。descending ordernamefragment

Fragment 3-> Fragment 5-> Fragment2.

これは私が試したことです:

最初の方法:

FragmentManager fm = getSupportFragmentManager();
int count = fm.getBackStackEntryCount();
for(int i = 0; i < count; ++i) {
    fm.popBackStackImmediate();
}

2 番目の方法:

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

これを機能させることができません**(つまり、元のフラグメントに戻すことができません**)、バックスタックに基づいてフラグメントの名前を表示できません

どんな助けでも大歓迎です。

4

4 に答える 4

1

1.ハンドルバック

getSupportFragmentManager().popBackStack()次のメソッドを使用できますonBackPressed

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
         getSupportFragmentManager().popBackStack();
         getSupportFragmentManager().beginTransaction().commit();
    }
    else {
        super.onBackPressed();
    }
}

次のように BackStack にフラグメントを追加することを忘れないでください。

transaction.addToBackStack(null);

2.表示名

アクションバーに現在のフラグメント名を表示するには、 Fragment でそれを取得できonResumeます:

@Override
protected void onResume() {
    super.onResume();

    ((FrgmentActivtiyName)getActivity).changeTitle("title");
}

FrgmentActivity のアクションバーにタイトルを設定するメソッドを定義します。

public void changeTitle(String titleToSet) {
   // set title as titleToSet
}

お役に立てば幸いですツ</p>

于 2014-12-11T08:58:00.363 に答える
1

あなたのナビゲーションはうまく機能していると思います。あなたが直面している問題は、使用できるタイトルです

public class SampleFragment extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

                // Creating view correspoding to the fragment
        View v = inflater.inflate(R.layout.fragment_layout, container, false);

        // Updating the action bar title
        getActivity().getActionBar().setTitle("Screen name");


        return v;
    }
}

すべてのフラグメントで。そして、バックプレスするたびに、fragmemt の onCreateView メソッド (バックスタックからポップしているメソッド) が呼び出され、タイトルが再び設定され、古いタイトルが置き換えられます。

于 2014-12-11T09:09:41.007 に答える
0

これを試してください:

フラグメントを保持するアクティビティで、 onbackPressed() メソッドを次のようにオーバーライドします。

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
         getSupportFragmentManager().popBackStack();
         getSupportFragmentManager().beginTransaction().commit();
    }
    else {
        super.onBackPressed();
    }
}
于 2014-12-11T07:44:06.850 に答える
-1
if (fragment != null) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
        menuList.setItemChecked(position, true);
        menuList.setSelection(position);
    }
于 2014-12-11T07:40:34.130 に答える