【问题标题】:Android drawer and back button in activity活动中的Android抽屉和后退按钮
【发布时间】:2014-09-02 01:37:29
【问题描述】:

当我点击导航抽屉项时,片段会启动一个活动。

public class CalculateFareFragment extends Fragment {
    View rootView;

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        Intent intent = new Intent(getActivity().getApplicationContext(), CalculateFareActivity.class);
        startActivity(intent);
        return null;
    }

在活动中,当我按下返回按钮时,设备上的屏幕会闪烁并再次显示相同的活动。第二次按下后退按钮将我带到应用程序的默认屏幕。

有没有办法克服这种行为,这样我就不需要按两次后退按钮了?

编辑:根据@spurdow 的建议,我设法添加了addToBackStack(null)

android.app.FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

我仍然没有看到行为有任何变化。还有什么遗漏的吗?

【问题讨论】:

  • 你试过在后台添加 null 吗?
  • 不,我会试试的。我不知道该怎么做。
  • 当您在beginTransactionadd 之后在FragmentManager 中创建事务时,您可以将其添加到后台堆栈或空
  • 为什么需要创建一个片段来启动另一个活动? CalculateFareFragment 有其他用途吗?
  • 好的。我承认我很懒惰。但是懒惰导致了这种情况。我可能可以修复代码并将活动更改为片段。我认为从片段中调用活动会更快:(

标签: android android-activity navigation-drawer


【解决方案1】:

如果你想管理按下的后退按钮,你必须使用 onBackPressed() 类来管理它:

@Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } }

并在片段中调用活动是在它们的视图之间切换的正常方式,因此如果您想管理导航抽屉项目选择,则有一个实现如下的类: 例如,

@SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_photos) { // Handle the camera action //setContentView(R.layout.myaccount); } else if (id == R.id.nav_myaccount) { setContentView(R.layout.activity_myaccount2); // } else if (id == R.id.nav_logout) { UserLocalStore loginuser = new UserLocalStore(this); loginuser.clearUserData(); finish(); startActivity(new Intent(getApplicationContext(), MainActivity.class)); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多