bvi*_*iyg 53 android android-fragments
我的应用程序在其Activity中有一个Fragment.我想以编程方式从当前片段本身替换另一个片段.
例如,如果我单击片段内的按钮,则片段应替换为另一个片段,但活动应保持不变.
可能吗?如果是这样,怎么办?
Anu*_*kur 54
来自官方文档:
// 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();
Run Code Online (Sandbox Code Playgroud)
在此示例中,newFragment替换当前在R.id.fragment_container
ID 标识的布局容器中的任何片段(如果有).通过调用addToBackStack()
,替换的片段被保存到后栈,因此用户可以通过按Back按钮来反转事务并恢复前一个片段.
您描述的行为正是要设计的片段.请仔细阅读官方指南,以便彻底了解碎片,这将清除您的所有问题.
http://developer.android.com/guide/components/fragments.html
alo*_*rma 47
实际上很容易调用活动来替换片段.
你需要强制转换getActivity():
((MyActivity) getActivity())
Run Code Online (Sandbox Code Playgroud)
然后,您可以从MyActivity调用方法,例如:
((MyActivity) getActivity()).replaceFragments(Object... params);
Run Code Online (Sandbox Code Playgroud)
当然,这假设您在活动中有一个replaceFragments()方法来处理片段替换过程.
编辑: @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();
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ski 26
请注意,片段应该不是直接取代自己或任何其他碎片.片段应该是单独的实体.应该做什么片段来通知其父活动已发生某些事件.但,这一次,不是一个片段工作,以决定如何处理呢!它应该是决定即在手机上替换片段的活动,但是要在平板电脑上添加另一个片段.所以你基本上是在设计上做错了.
并且,正如其他人已经提到的,您的活动应该使用FragmentManager("本机"或兼容库)来完成工作(如replace()
或add()
或remove()
):
http://developer.android.com/guide/components/fragments.html
归档时间: |
|
查看次数: |
47650 次 |
最近记录: |