按下向上按钮时适当的背板导航

时间:2016-02-02 07:31:20

标签: android fragment-backstack up-navigation

我使用onBackPressed()在MainActivity(有很多片段)的Back按钮上实现了backstack导航。我想在按下按钮时实现相同的背板导航。问题是我只想在一个片段中使用Up按钮,但是当我按下所需片段上的向上按钮时,每个片段上都会出现Up按钮。甚至setDisplayHomeAsEnabled(false)也无效。如何只在一个片段中使用向上按钮?



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();
    }
}




1 个答案:

答案 0 :(得分:0)

我在GitHub上创建了一个示例应用程序来解决这种后台堆栈问题。

下载Fragment Back Stack申请