【问题标题】:Get back to a fragment from an Activity从 Activity 返回片段
【发布时间】:2014-07-18 14:44:18
【问题描述】:

我在 Activity C 中有三个片段。它们的行为类似于标签。我必须从一个片段转到一个新的 Activity X。现在我想从 Activity X 回到片段。

我已经覆盖 onBackPressed 但不知道如何从 Activity 返回到 fragment/not fragmentActivity。

如果我想回到一个 Activity 到另一个 Activity,我会在按下后覆盖并使用 Intent 调用该 Activity..

我想做一些这样的事情..这段代码是为了回到以前的活动

@Override
public void onBackPressed()
{

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

    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

    startActivity(intent);
}

提前谢谢..

【问题讨论】:

  • 在您的BackPressed(...) 中,您需要replacereattach 您之前的@​​987654325@
  • 我也有同样的想法,但不知道怎么做..请分享一些代码示例..
  • 显示 Arnab 答案如下

标签: android android-intent android-activity fragment


【解决方案1】:

首先,覆盖后按以转到片段所在的活动:-

@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
【解决方案2】:

您可以添加一个 TAG(基本上是片段的字符串名称),然后使用 findFragmentByTag(). 加载片段

findFragmentByTag() 的 Google 文档是 here

或者你也可以addToBackStack()同时从FragmentTransaction调用片段,文档链接here。 来自谷歌文档:

"通过调用 addToBackStack(),将替换事务保存到 回栈,以便用户可以撤消交易并带回 上一个片段通过按返回按钮。”

【讨论】:

  • 我认为 addToBackStack() 可以在片段之间移动。从一个片段返回到另一个片段时/
【解决方案3】:

最简单的方法:

@Override
onBackPressed(){
finish();
}

【讨论】:

    【解决方案4】:

    当您从片段开始活动时,片段永远不会被杀死, 您可以通过 finish(); 杀死当前活动来简单地回到您的片段;, 就像从片段中打开活动并按下后退按钮一样 您在没有丢失数据的情况下跳转到片段。

    【讨论】:

      【解决方案5】:

      如果我想回到一个活动到另一个我覆盖的活动 后按并使用意图调用该活动

      通常,如果你想回去,你不必做任何事情。按下设备的硬件后退按钮将带您到已打开相应选项卡的上一个活动。

      【讨论】:

      • 您说得对,但这将帮助我不要从堆栈中删除活动。任何活动的 onBackpressing 都会从堆栈中删除活动
      • 没错,我相信它应该是这样的。但是,如果由于某些原因您不希望有这种行为,那么您可以使用viewPager.setCurrentItem(tabPosition); 打开已打开特定选项卡的活动。所以你可以在onBackPressed() 中设置一些标志,在你的活动中检查它,如果设置了标志,则显示相应的选项卡。
      • Activity X 是我的播放器。我也想保持它的搜索栏状态。所以为了做到这一点,我必须找到一种方法从活动中返回片段而不将其从堆栈中删除..
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        在您从片段开始的活动中,您可以执行以下操作:

            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                //do whatever you want here
                finish();
                return true;
            }
        

        这对我有用:)

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            enter image description here

            @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);
                }
            }
            

            如果您在该片段中有操作栏,那么您可以在包含类似方法的 Activity 中查看 onBackPressed() 上的操作栏标题。

            【讨论】:

              【解决方案10】:

              你可以在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()
                  }
              

              这将使您回到片段之前的相同状态

              【讨论】:

                【解决方案11】:
                viewPager.setCurrentItem(tabPosition);
                

                这个解决方案给我带来了奇迹。

                【讨论】:

                • 虽然这段代码 sn-p 可以解决问题,但包括代码中的解释确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性! meta.stackexchange.com/q/114762/308249
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-12-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多