3

プロジェクトでこのスライド メニューを使用しています

https://github.com/jfeinstein10/SlidingMenu

このメニューをすべてのアクティビティに追加しています。そして、このスライド メニューは、開くときに Fragment を呼び出しています。Fragment がバックスタックで既に作成されている場合、アクティビティごとに複数のフラグメントが作成されないようにするにはどうすればよいですか?

私の各アクティビティは BaseActivity を拡張しており、BaseActivity でこのようなスライド メニューを初期化しています。

getSupportFragmentManager()
    .beginTransaction().replace(R.id.detail, new DetailFragment())
    .commit();

ありがとう

4

1 に答える 1

1

(少なくとも) 1 つのアクティビティのみを実装し、コンテンツ フレーム内のさまざまなフラグメントを置き換えようとします。この例には、1つを選択する必要があるさまざまなアプローチが含まれていることを知っておく必要があります;)

したがって、メニューとコンテンツのフラグメントがあると、以下のように開始できます (比較ResponsiveUIActivityも)。

public class StartActivity extends SlidingFragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...

        Fragment contentFragment = InitialFragment()

        getSupportFragmentManager().beginTransaction()
           .replace(R.id.content_frame, contentFragment).commit();

        getSupportFragmentManager().beginTransaction()
           .replace(R.id.menu_frame, new MenuFragment()).commit();

        ...
    }

    public void switchContent(final Fragment fragment) {
        // replace fragment in content frame
        ...
    }

メニューフラグメントでは、ユーザーの選択に応じて新しいフラグメントを作成できます (比較BirdMenuFragment):

public class MenuFragment extends ListFragment {

    @Override
    public void onListItemClick(ListView lv, View v, int position, long id) {
        Fragment newContent = null;

        switch (position) {
            case 1 : new ThisFragment();
                     break;
            case 2 : new ThatFragment();
                     break;
            case 3 : new AnotherFragment();
                     break;
        }

        if (newContent != null) switchFragment(newContent);
    }

    private void switchFragment(Fragment fragment) {
        // call StartActivity.switchContent
        ...
    }

最後に、アクティビティとメニュー フラグメントの間の接着剤はMenuFragment.switchFragment(Fragment fragment)andですStartActivity.switchContent(final Fragment fragment)が、メニュー フラグメント メソッドはアクティビティ メソッドを呼び出して、コンテンツ フレーム内のコンテンツ フラグメントを置き換えます (クラスBirdMenuFragmentResponsiveUIActivity例を比較してください)。

これは、SlidingMenu を実装する方法と、コンテンツ フレーム内のフラグメントを置き換える方法の概要にすぎません。もちろん、対処しなければならないいくつかの課題が残されています。

とにかく、少しでもお役に立てれば幸いです...乾杯!

于 2013-05-03T19:55:39.900 に答える