【问题标题】:Blank page after selecting a default item and pressing back button NavigationView选择默认项目并按下返回按钮 NavigationView 后的空白页
【发布时间】:2016-05-02 17:15:47
【问题描述】:

当我的活动启动时,我正在 NavigationView 中选择一个默认片段, 它工作正常,但问题是当我按下后退按钮时,我看到一个空白视图。

我的活动

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    private final String TAG = "MainActivity";
    NavigationView navigationView;


    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        String about_blog = "http://example.com/page/json/urls/p-about";
        String contri = "http://example.com/page/json/urls/contribute";
        String privy = "http://example.com/page/json/urls/privacy-rules";
        String contact = "http://example.com/page/json/urls/contact_us";
        String advert = "http://example.com/page/json/urls/advertise-here";
        String spons = "http://example.com/page/json/urls/sponsor-us";

        Fragment fragment = null;

        if (id == R.id.menu_home) {
            fragment = new PostFragment();
        }

        if (id == R.id.about_blog) {
            fragment = new PageFragment();

        } else if (id == R.id.nav_contri) {
            fragment = new PageFragment();

        } else if (id == R.id.nav_contact) {
            fragment = new PageFragment();

        } else if (id == R.id.nav_privy) {
            fragment = new PageFragment();

        } else if (id == R.id.nav_advert) {
            fragment = new PageFragment();

        } else if (id == R.id.spons) {
            fragment = new PageFragment();

        } else if (id == R.id.app_about) {
            //fragment = new abtFragment();
        } else if (id == R.id.settings) {
            //fragment = new SettingFragment;
        }


        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.content_frame, fragment);
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "Device rotated and onCreate called");

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.menu_home);
        navigationView.getMenu().performIdentifierAction(R.id.menu_home, 0);
    }

为了说明,当我启动应用程序时,默认情况下会启动 PostFragment。当我单击后退键时,我没有关闭应用程序,而是遇到一个空白页面。

请问,我在这里做错了什么,我该如何纠正?

【问题讨论】:

    标签: android navigation-drawer


    【解决方案1】:

    我找到了解决方案here。粘贴这个

        FragmentManager fm = getSupportFragmentManager();
     fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
    
    @Override public void onBackStackChanged() { if (getSupportFragmentManager().getBackStackEntryCount() == 0) finish(); } });
    

    在托管活动的onCreate

    如果当前片段是返回堆栈中的最后一个片段,则它的作用是完成活动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多