【问题标题】:toolbar and navigation on it工具栏和导航
【发布时间】:2015-12-09 20:21:15
【问题描述】:

该项目具有工具栏的活动。动态变化的片段中的活动。根据片段应该改变内容工具栏。 转到第二个片段应该会出现在工具栏上的 nazat 箭头中,该箭头返回到前一个片段。

public class StartPageActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private Toolbar mToolbar;
private NavigationView mNavigationView;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start_page_activity);
    setTitle("ForgetFul");
    getFragment(new MainFragment());
    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);
    mNavigationView = (NavigationView) findViewById(R.id.main_drawer);
    mNavigationView.setNavigationItemSelectedListener(this);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_widget);
    drawerToggle
            = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close);
    mDrawerLayout.setDrawerListener(drawerToggle);
    drawerToggle.syncState();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        Log.i("Activity", "Setting");
        return true;
    }
    if (android.R.id.home == id) {
        Log.i("One", "Dude");
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}...

在active中从一开始就显示MainFragment。 在第二个活动中,我使用以下代码:

((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

出现“向上”箭头,但是当我单击箭头时,始终打开 NavigationView。 如何解决? 附言对不起英语:(

【问题讨论】:

  • 按(手机的)返回键是否可以返回到上一个片段?
  • 我特意询问的是返回键,而不是工具栏中的向上箭头。
  • yap....当按返回键(电话)时,我返回到上一个片段
  • onBackPressed () when menuID == android.R.id.home ?
  • 当我删除它的 mNavigationView = (NavigationView) findViewById(R.id.main_drawer); mNavigationView.setNavigationItemSelectedListener(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_widget); drawToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close); mDrawerLayout.setDrawerListener(drawerToggle);抽屉切换.syncState();从活动。 menuId == android.R.id.home 工作,但我不能删除这部分代码。

标签: android android-fragments toolbar navigationview


【解决方案1】:

试试这个。
首先,删除 implements NavigationView.OnNavigationItemSelectedListener ,同时注释掉覆盖的方法和变量。

然后像这样覆盖 Activity 的 onBackPressed() 方法:

    @Override
public void onBackPressed() {
    FragmentManager fragmentManager = getFragmentManager();
    if (fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}

这将确保在按返回键时显示之前的片段。

然后,只需在 onOptionsItemSelected() 方法中调用它:

    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }

【讨论】:

  • 我实现了这个......而且我有 onBackpressed;但是如果 (id == android.R.id.home) { onBackPressed();返回真; } 不工作
  • 当我删除部分代码时它的工作...... mNavigationView = (NavigationView) findViewById(R.id.main_drawer); mNavigationView.setNavigationItemSelectedListener(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_widget); drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close); mDrawerLayout.setDrawerListener(drawerToggle); drawToggle.syncState();
  • 确保您没有设置自定义向上图标。它应该只是 final ActionBar ab = ((MainActivity) getActivity()).getSupportActionBar(); ab.setDisplayHomeAsUpEnabled(true); 如果您要设置自定义向上图标,那么您必须在 if (id == R.id.my_custom_up_icon) 中引用它
  • 参考 Chris Banes 的 Cheesquare 应用程序中的 MainActivity 和 CheeseDetailActivity 类,希望您能检测到错误。 :) github.com/chrisbanes/cheesesquare/tree/master/app/src/main/…
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多