【问题标题】:How to move from an activity back to navigation drawer如何从活动移回导航抽屉
【发布时间】:2017-03-18 22:40:01
【问题描述】:

首先我创建导航抽屉活动的应用程序并从片段移动到新活动,现在我想在导航到导航抽屉主要活动的新活动上设置主页按钮。我尝试使用此代码:

btnHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(add_activity.this,MainFragment.class);
                startActivity(intent);
                finish();

            }
        });

但显示错误,因为很遗憾您的应用已停止

【问题讨论】:

  • 包括你的logcat!这里没有足够的信息供任何人回答您的问题
  • 自然任务回栈排序应该让你回来吗?使用图表或您想要发生的事情的纹理流程。
  • 好吧,忘记错误。请问你能告诉我需要什么样的代码才能把我从一个活动带到导航抽屉,上面的代码是否正确?

标签: android fragment


【解决方案1】:

为了帮助您,我们需要更多详细信息。 我注意到的第一件事是这条线

Intent intent = new Intent(add_activity.this,MainFragment.class);
                startActivity(intent);
                finish();

这个问题是你不能用 Intent 开始片段。

如果您想从 MainActivity 开始 TravelActivity,请这样做:

Intent intent = new Intent (this /*indicating your current activity*/, TravelActivity.class /*indicating Activity you want to start*/)
startActivity(intent); //start TravelActivity
finish() //finish current activity - if you press back you will exit the app (if MainActivity was launcher activity)

如果您有在 Travel 活动开始时应该加载的片段,那么下面是一个简单的帮助方法,它将为您执行片段事务

public void replaceFragment(int rootViewId, Fragment fragment, boolean addToBackStack) {
    try {
        FragmentManager fragmentManager = getSupportFragmentManager();

        if (fragment == null)
            return;
        if (checkIfFragmentIsCurrent(fragment, rootViewId))
            return;

        String backStateName = fragment.getClass().getSimpleName();
        boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);

        if (!fragmentPopped) {

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(rootViewId, fragment);

            if (addToBackStack) {
                transaction.addToBackStack(fragment.getClass().getSimpleName());
            }
            transaction.commit();
        }
    } catch (Exception e) {
        Log.e("ReplaceFragment", "Exception: " + e.getMessage());
    }
}

protected boolean checkIfFragmentIsCurrent(Fragment fragment, int placeHolderRes) {
    Fragment currentFragment = getSupportFragmentManager().findFragmentById(placeHolderRes);
    if (fragment != null && currentFragment != null) {
        if (fragment.getClass().equals(currentFragment.getClass())) {
            return true;
        }
    }
    return false;
}

为了使用它,只需调用replacFragment(将保存您的片段的容器的ID,片段实例,true - 如果您想将片段添加到backStack)

要了解片段交易,请参阅link

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多