[英]Adding Fragment to the addToBackstack when you have a single activity with 2 fragments
Android Studio 1.1.2
你好,
我有MainActivity,TitlesFragment和DetailsFragment。
我的MainActivity将显示TitlesFragment,当用户单击标题时,TitlesFragment将替换为DetailsFragment。 很好 但是,当我将DetailsFragment添加到addToBackStack时。 当我单击“后退”按钮时,它不会关闭TitlesFragment而是显示该应用程序。
我在想,因为我需要2活动。 一个用于TilesFragment,另一个用于DetailsFragment? 目前,我正在尝试通过一个活动来执行此操作?
当前,这是我的MainActivity代码片段(仅显示片段事务)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.activity_main);
/* Load ListFragment */
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
/* If the fragment is null then we need to load this fragment */
if(fragment == null) {
fragment = TitlesFragment.newInstance(1234);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.add(R.id.fragment_container, fragment, "TitlesFragment");
fragmentTransaction.commit();
}
}
@Override
public void onColorPlateSelected(long plateID) {
Log.d(TAG, "onColorPlateSelected: " + plateID);
/* Get the plate ID and pass it to the details fragment */
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
/* Replace the fragment with the new color plate */
fragmentTransaction.replace(R.id.fragment_container, DetailsFragment.newInstance(plateID), "DetailsFragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();
}
我的activity_main布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
在这里,ActivityMain将替换帧布局中的片段。
我已经通过处理OnBackPressed事件处理程序看到了这一点。 但是我想知道如果没有它我能做到吗?
非常感谢您的任何建议,
尝试仅将相同的addToBackStack()方法添加到您添加到活动中的第一个列表片段中。 即
fragment = TitlesFragment.newInstance(1234);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.add(R.id.fragment_container, fragment, "TitlesFragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
然后,这应防止第二个片段在后堆栈中替换它。
我设法解决了这个问题。 我主要活动的签名是这样的:
public class MainActivity extends ActionBarActivity {
..
}
我正在扩展MainActivity以从ActionBarActivity继承。 但是,当我将类签名更改为:
public class MainActivity extends Activity {
..
}
一切都按预期工作,我可以使用backButton从detailsFragment导航到titlesFragment。
不知道为什么会这样,也许在使用片段时,最好在片段本身而不是在主要活动中实现操作栏。
希望这可以帮助别人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.