本文介绍了呼吁片段生命周期方法与每一个方位变化增加的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从定向一个片段切换到另一个。

Orientation change from one fragment to another.

方向1(风景到人像):

Orientation 1 (Landscape to Portrait):


    片段1的
  • 的onSaveInstanceState()。

  • 片段2
  • 的onSaveInstanceState()。

  • 的onStop()的片段2。

  • 片段1的onDestroy()。

  • onDetach()的片段1。

  • onAttach()的片段2。

  • onCreateView()的片段2。

  • 片段2在onStart()。

2方向(纵向到横向背):

Orientation 2 (Portrait to Landscape back):


    片段1的
  • 的onSaveInstanceState()。

  • 片段2
  • 的onSaveInstanceState()。

  • 的onSaveInstanceState()的片段1。

  • 的onStop()的片段2。

  • 片段1的onDestroy()。

  • 片段1 的
  • onDetach()
  • 片段1 的onDestroy()。

  • 片段1 onDetach()

  • onAttach()的片段2。

  • onCreateView()的片段2。

  • 片段2在onStart()。

所以,当你注意到,当我回来的片段1,的onSaveInstanceState()的onDestroy()和onDetach()被称为为第二方向连续变化两次

So as you notice that when I come back to fragment 1, the onSaveInstanceState(), onDestroy() and onDetach() are called two times for second orientation successive change.

像,它不断与每一个方向变化而增加。

Like that it keeps on increasing with every orientation change.

我的活动code:

My activity code:

我加入片段这样的 -

I am adding the fragment like this-

Fragment1 firstFragment = new Fragment1();
Bundle bundle = new Bundle();
firstFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();

更新:

所以发生的是,每当我点击任何选项卡上,在 addToBackStack 添加标签片段放入容器内降低内存并调用反复的生命周期方法。

So what is happening is whenever I click on any tab, the addToBackStack adds the tabbed fragment into the container decreasing the memory and calling repeated life cycle methods.

任何方式有效地检查片段已经存在然后删除previous并添加当前的?

Any way to effectively check if the fragment already exist then remove previous and add the current one ?

注意:

我试过了 -


  1. 如果(savedInstanceState == NULL){/ *添加片段* /}

片段1片段=(片段1)getSupportFragmentManager()findFragmentById(R.id.article_fragment)。
 //如果(片段== NULL){/ *添加片段* /}

这些都是不会导致其他问题解决干净

These aren't clean solutions causing other problems.

推荐答案

可能会对您的生命周期可能会被不正确处理片段BackStack。这就是为什么它可能会被多次调用。我也面临这个问题进行碎片。但现在你可以删除你的加入片段backStack继续。

Probable cause to your Lifecycle might be, not handling Fragment BackStack correctly. That's why it might be calling multiple times. I too have faced this issues with fragments. But for now you can remove adding your Fragment to backStack to proceed.

您code将变成:

Fragment1 firstFragment = new Fragment1();
Bundle bundle = new Bundle();
firstFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.commit();

一些例子,你可以找到处理AddingBackStack一个片段可以发现:<一href=\"http://www.java$c$cgeeks.com/2013/06/android-fragment-transaction-fragmentmanager-and-backstack.html\" rel=\"nofollow\">http://www.java$c$cgeeks.com/2013/06/android-fragment-transaction-fragmentmanager-and-backstack.html

和为了保留碎片成员的值,可以使用共享preference在Android中持有的价值观和装载活动时取回。

And In order to retain the Fragments member values, you can use SharedPreference in Android to hold values and retrieve when activity is loaded.http://developer.android.com/reference/android/content/SharedPreferences.html

这篇关于呼吁片段生命周期方法与每一个方位变化增加的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 02:18