【问题标题】:Different onBackPressed for activity and fragment活动和片段的不同onBackPressed
【发布时间】:2018-06-21 12:44:09
【问题描述】:

我的应用流程是:

活动 A -> 活动 B(此活动具有单击打开片段的按钮)

我希望当我在 Activity B 的片段上时,在后按时,流程应该流向 Activity B,而当我在 Activity B 上时,在后按时应用程序应该退出。

我目前正在使用:

@Override
public void onBackPressed() {

    if(getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStackImmediate();
    }

    else {
        super.onBackPressed();
    }
}

在 Activity B 的片段上按回时它工作正常,但从 Activity B 回按时它会转到 Activity A(而且由于某种原因,Activity A 中也没有显示任何内容)。

编辑

我的片段调用代码:

faqsBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mLoginSubmit.setVisibility(View.GONE);
            Bundle b1 = new Bundle();
            b1.putString("ComingFrom","Login");
            android.support.v4.app.Fragment faqsFragment = new fragment11Faqs();
            faqsFragment.setArguments(b1);
            android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.framelayoutfaqs,faqsFragment);
            transaction.addToBackStack(faqsFragment.toString());
            transaction.commit();
        }
    });

【问题讨论】:

标签: java android


【解决方案1】:

您应该在从ActivityA 声明其意图后立即调用Activity B 时调用finish()

这样

Intent intent=new Intent(ActivityA.this,ActivityB.class);
startActivity(intent);
finish();

你的backstack代码在活动b中很好,只需在super.onBackPressed();之后添加finish()

@Override
public void onBackPressed() {

    if(getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStackImmediate();
    }

    else {
        super.onBackPressed();
        finish();
    }
} 

这里是如何将片段添加到 backstack

 Fragment cameraEditing = new Editing(); FragmentManager
 fragmentManager = getFragmentManager(); FragmentTransaction 
fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.cameraLayout, 
cameraEditing,"cameraEditing"); 
fragmentTransaction.addToBackStack("cameraEditing");
 fragmentTransaction.commit();

【讨论】:

  • 即使我按回片段,这也会退出应用程序
  • 您是否将片段添加到后台堆栈?
  • 你能告诉我该怎么做吗?
  • 好吧,当你编写代码来添加或替换片段时,你只需要添加这一行 - addtobackstack() 然后它将它添加到 backstack ,你可以通过如何添加在 Google 上查看代码片段返回堆栈,那么这段代码就可以正常工作了
  • 错了,不要传null,把fragment名字传到那里,看看怎么把fragment加到backstack就更好了
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2021-11-23
  • 1970-01-01
相关资源
最近更新 更多