从Activity切换到Fragment

3
我有一个名为F1的片段,从那里我打开了一个名为A1的活动,在那个活动(A1)之后,我打开了另一个活动(A2),并在A2中执行一些任务。现在,一旦我在我的活动(A2)中完成了任务,我想销毁当前打开的活动并返回到我的片段F1
这就是我试图回到我的片段的内容:
    Intent intent = new Intent(context, myFragment.class);
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    startActivity(intent);

但我遇到了这个错误:无法找到显式活动类

我知道为什么会出现这个错误(因为指定的类不是一个Activity,而是一个Fragment),但我的问题是如何返回到该Fragment?

片段不能像活动一样启动。Activity类持有并显示Fragment。在其父Activity之外,您无法“返回到Fragment”。 - OneCricketeer
你不能使用Intent启动一个Fragment。myFragment必须是Activity/Service而不是Fragment。 - AmmY
1
当您从A1移动到A2时,在调用startActivity()之前请先调用finish(),然后当您想要从A2返回时,只需调用finish()即可。 - Shaishav
@Ammy 我知道为什么,但我的问题是我该如何返回到那个片段?一定有办法对吧。 - remy boys
@Shaishav 但是如果用户想要从A2返回到A1进行一些更改怎么办?添加finish将从该Activity中删除持久性,对吗? - remy boys
显示剩余4条评论
2个回答

2

你无法使用意图(Intent)启动一个Fragment,每个Fragment都附加在某个活动(Activity)上。可以在Activity中替换或添加Fragments。

你可以这样做:将你的Fragment F1附加到某些活动(比如A0)上。所以你可以这样做:

  Intent intent = new Intent(context, A0.class);
intent .putExtra("openF2",true)
    overridePendingTransition(0, 0); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish(); 
    startActivity(intent); 

然后,在您的 A0 活动的 onCreate 内部,您可以检查要替换哪个片段:

public void onCreate(Bundle savedInstanceState){
Bundle extras = getIntent().getExtras();
 if(extras!=null && extras.containsKey("openF2"))
  boolean openF2 = extras.getBoolean("openF2");
if(openF2){
  //add or replace fragment F2 in container
 }
}

这只是伪代码。希望您能理解它。

编辑:如果您想返回到之前的片段,可以显式调用活动的onBackPressed()两次,以返回到包含该片段的活动A0。虽然这不是一个好主意。


0

将以下代码放入您想要移动的 Activity 中。

btnDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
   Intent intent = new Intent(SelectLocation.this,MainActivity.class);
   intent .putExtra("tag",true);
   finish();
   startActivity(intent);
        }
    });

并且将以下代码放置于您已附加所有片段的活动中的OnCreate方法内。

public void onCreate(Bundle savedInstanceState){
Bundle extras = getIntent().getExtras();
if(extras!=null && extras.containsKey("flag"))
 boolean flag= extras.getBoolean("flag");
   if(flag){
      currentFragment = getOneFragment();
   }
 }

这将对您正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接