-1

onBackPressed() を使用して、MainActivity (多くのフラグメントがある) の [戻る] ボタンにバックスタック ナビゲーションを実装しました。上ボタンを押したときに同じバックスタック ナビゲーションを実装したい。問題は、1 つのフラグメントでのみ [上へ] ボタンが必要ですが、目的のフラグメントで [上へ] ボタンを押すと、すべてのフラグメントに [上へ] ボタンが表示されることです。setDisplayHomeAsEnabled(false) でさえ機能していません。1 つのフラグメントのみに [上へ] ボタンを表示するにはどうすればよいですか?

Desired Fragment:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
      
   }   
Main Activity

public class HomePage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.homepage);


        if (findViewById(R.id.fragment_place) != null) {

            if (savedInstanceState != null) {
                return;
            }
            HomeFrag firstFragment = new HomeFrag();
            getSupportFragmentManager().beginTransaction().add(R.id.fragment_place, firstFragment).commit();
        }

    }

 /*   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                 onBackPressed();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    } */


    public void selectFrag(View view) {
        Fragment fr = null;

        if (view == findViewById(R.id.home_btn)) {
            fr = new HomeFrag();

        } else if (view == findViewById(R.id.search_btn)) {
            fr = new SearchFrag();


        } else if (view == findViewById(R.id.log_btn)) {
            fr = new LogFrag();

        } else if (view == findViewById(R.id.events_btn)) {
            fr = new EventFrag();

        } else if (view == findViewById(R.id.profile_btn)) {
            fr = new ProfileFrag();

        }

        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_place, fr).addToBackStack(null);
        fragmentTransaction.commit();

    }

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

4

1 に答える 1

0

そんなバックスタックの問題を解決するためにGitHubにサンプルアプリを作りました。

Fragment Back Stackアプリケーションのダウンロード

于 2016-02-02T07:36:27.660 に答える