从 Activity 返回到 Fragment

12

我在一个名为C的Activity中有三个片段(fragment),它们的行为类似于选项卡。我需要从一个片段转到一个新的名为X的Activity,现在我想要从Activity X返回到该片段。

我已经重写了onBackPressed方法,但不知道如何从一个Activity返回到片段(或非FragmentActivity)。

如果我想要从一个Activity回到另一个Activity,我会重写onBackPressed方法,并使用intent调用该Activity。

我想要做类似于这样的事情……下面的代码是用于返回到上一个Activity。

@Override
public void onBackPressed()
{

    Intent intent = new Intent(CurrentActivity.this,ActivityYouLikeToGo.class);

    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

    startActivity(intent);
}

提前感谢您的帮助。


在你的 BackPressed(...) 方法中,你需要 替换 或者 重新附加 之前的 Fragment - M D
我也有同样的想法,但不知道该如何实现。请分享一些代码示例。 - Zar E Ahmer
展示以下Arnab的答案 - M D
11个回答

7

首先,重写返回按钮以跳转到包含片段的活动:

@Override
public void onBackPressed()
{

    Intent intent = new Intent(CurrentActivity.this,ActivityYouLikeToGo.class);

    intent.putExtra("Check",1);
    startActivity(intent);
}

然后转到ActivityYouLikeToGo.java文件,在onCreate中执行以下操作:
Intent intent = getIntent();
String s1 = intent.getStringExtra("Check");

if(s1.equals("1"))
  {
s1 = "";
Fragment fragment = new YOURFRAMENTNAME();
if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();
  }
}

很高兴能够帮助。如果这个答案对您有用,请接受它 :D - Soumil Deshpande

5
你可以添加一个标签(基本上是用于片段的字符串名称),然后使用findFragmentByTag()加载片段。
谷歌文档中关于findFragmentByTag()的说明请参见这里
或者,你也可以在从FragmentTransaction调用片段时调用addToBackStack(),文档链接在这里。 来自谷歌文档:

“通过调用 addToBackStack(),替换事务将保存到后退栈中, 因此用户可以通过按返回按钮撤消事务并恢复先前的片段。”


我认为addToBackStack()函数可以用于在片段之间进行切换。当从一个片段返回到另一个片段时,它会起作用。 - Ankur_009

5

最简单的方法:

@Override
onBackPressed(){
finish();
}

2
当您从一个片段开始一个活动时,该片段永远不会被杀死,您可以通过finish()来杀死当前活动,然后简单地回到您的片段,就像当您从一个片段打开一个活动时,按下返回按钮时,您可以跳转到片段而不会丢失数据。

0
在从您的片段启动的活动中,您可以执行以下操作:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //do whatever you want here
        finish();
        return true;
    }

对我来说可以的 :)


0

您可以在activity.xml中添加以下内容:

<androidx.appcompat.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/white"
        app:navigationIcon="?attr/homeAsUpIndicator" />

然后在 activity.kt 文件中:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityBinding.inflate(layoutInflater)
        setContentView(binding!!.root)

        binding!!.toolBar.setNavigationOnClickListener{
            onBackPressed()
        }
}

在重写的函数中执行以下操作:

override fun onBackPressed() {
        super.onBackPressed()
        finish()
    }

这将使您返回到片段的先前状态


0

这段代码在我的情况下可行。我只是为按钮创建了一个Onclick方法。 代码如下:我在Button中创建了onclick方法clickForFriends和Id为backFriendsList,并使用了android.support.v4.app.Fragment类。此方法应从新的Activity回到启动该Activity的Fragment,并且此方法应该在onCreate方法之后在Activity中。

 public void clickedForFriends(View v){
    if (v.getId() == R.id.backFriendsList){
       onBackPressed();
    }
}

0
如果我想从一个Activity返回到另一个Activity,我会重写onBackPressed方法,并使用Intent调用该Activity。
通常情况下,如果您想返回上一页,您不需要做任何操作。按设备的硬件返回按钮将带您回到先前打开的相应选项卡的Activity。

你说得没错,但这并不能帮助我从堆栈中移除活动。从任何活动上按下返回键都会将该活动从堆栈中移除。 - Zar E Ahmer
没错,我相信应该是这样的。但是,如果出于某些原因您不想有这种行为,那么您可以使用 viewPager.setCurrentItem(tabPosition); 打开一个已经打开了特定选项卡的活动。因此,您可以在 onBackPressed() 中设置一些标志,在您的活动中检查它,如果设置了标志,则显示相应的选项卡。 - Andy Res
活动X是我的播放器。我还想保持它的进度条状态。因此,为了做到这一点,我必须找到一种方法从活动返回片段,而不将其从堆栈中删除。 - Zar E Ahmer

0
您可以使用startActivityForResult()开始导航到的活动,然后在返回到上一个活动时设置结果。在返回的活动中,根据结果代码显示片段。您可以通过隐藏所有不想显示的片段来完成此任务。即使从另一个片段转到另一个活动,也可以实现此操作。

0

在此输入图片描述

@Override
public void onBackPressed() {
  //Here "digiM" is an Actionbar Title
    if(getTitle().equals("digiM") || getSupportActionBar().getTitle().equals("digiM"))
    {
        //reload the activity if you want to open it again as your need
        Intent intent = new Intent(Your_Current_Activity.this,Your_Current_Activity.class);
        startActivity(intent);
    }
}

如果在该片段中有操作栏,则可以在包含方法的活动中检查操作栏标题onBackPressed()

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