如何从片段本身replace活动的片段?
我的应用程序在其Activity中有一个Fragment。 我想以编程方式从当前片段本身replace另一个片段。
例如,如果我点击片段中的一个button,片段应该被replace为另一个,但是活动应该保持不变。
可能吗? 如果是的话,该怎么做呢?
调用活动来replace片段实际上很简单。
你需要强制getActivity():
((MyActivity) getActivity())
然后,您可以从MyActivity调用方法,例如:
((MyActivity) getActivity()).replaceFragments(Object... params);
当然,这假定你的活动中有一个replaceFragments()方法来处理片段replace过程。
编辑: @ismailarilik在此代码中添加了replaceFragments的可能代码,下面的第一条评论是由@ silva96编写的:
replaceFragments的代码可以是:
public void replaceFragments(Class fragmentClass) { Fragment fragment = null; try { fragment = (Fragment) fragmentClass.newInstance(); } catch (Exception e) { e.printStackTrace(); } // Insert the fragment by replacing any existing fragment FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.flContent, fragment) .commit(); }
从官方文档:
// Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit();
在这个例子中,newFragmentreplace了R.id.fragment_container
ID标识的布局容器中的任何片段(如果有的话)。 通过调用addToBackStack()
,被replace的片段被保存到后退堆栈,以便用户可以通过按下“后退”button来反转事务并返回前一个片段。
你所描述的行为正是devise要做的事情。 请通过官方指南彻底了解碎片,这将清除所有的问题。
http://developer.android.com/guide/components/fragments.html
请注意,片段不应该直接replace自己或任何其他片段。 片段应该是独立的实体。 什么片段应该做的是通知其父母的活动,发生了一些事件。 但是,这又不是一个决定如何处理这个问题的片段工作! 它应该是活动,即决定即在手机上更换片段,而是在平板电脑上添加另一个片段。 所以你基本上是通过devise做错了。
而且,正如其他人已经提到的,你的活动应该使用FragmentManager(“native”或兼容库)来完成这个工作(如replace()
或add()
或remove()
):
http://developer.android.com/guide/components/fragments.html
正如马辛所说,你不应该有一个片段开始另一个片段或活动。 处理这种情况的更好的方法是为主要活动创build一个callback实现来处理请求,例如启动一个新的片段。 这是Android开发人员指南中的一个很好的例子。
- ADT需要'org.eclipse.wst.sse.core 0.0.0',但找不到
- 如何识别在ActionMode中是否单击完成button
- 调用setCompoundDrawables()不会显示Compound Drawable
- embeddedZxing库而不使用条码扫描器应用程序
- Android SDK中的getWidth / Height()和getMeasuredWidth / Height()之间的区别是什么?
- 操作栏的主页button的onClick侦听器
- 无限滚动图像ViewPager
- 如何为android-ndk8b(x86 arch Android)构buildi686-linux-android-gfortran?
- android多选ListView和Textview