我正在尝试使用以下代码行替换另一个片段:
FragmentTransaction ft = Activity.FragmentManager.BeginTransaction();
UploadCompleted ucompleted = new UploadCompleted();
ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");
ft.AddToBackStack(null);
ft.Commit();
该片段正在另一个使用Activity的片段管理器的片段中被替换。问题是,未调用替换片段的OnCreate和OnCreateView方法,并且片段的旧实例(第一次替换它时实例化的片段)得到实例化,这就是为什么我无法传递任何新的替换片段的值。知道我做错了什么吗?我是android开发的新手,所以我对片段的了解并不是很好。
答案 0 :(得分:1)
根据您的逻辑,应该调用新Fragment的OnCreate
和OnCreateView
。在FragmentTransaction
级Activity
而不是在Fragment级别进行public class ParentActivity:Activity
{
public void ChangeToUploadCompleted()
{
FragmentTransaction ft = FragmentManager.BeginTransaction();
UploadCompleted ucompleted = new UploadCompleted();
ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");
ft.AddToBackStack(null);
ft.Commit();
}
}
public FirstFragment:Fragment
{
void CaptureCompleted ()
{
((ParentActivity)Activity).ChangeToUploadCompleted();
}
}
是一种很好的做法。在上面的代码片段中,您将从已显示的片段中创建新片段的实例,并将其自身替换为父Activity。这不是推荐的方法。我建议进行以下更改。
{{1}}
这是切换片段的好习惯。这也可以解决您的问题
答案 1 :(得分:0)
ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");
在这个R.id中你放置在Fragment Activity或者Activity中的布局和UploadCompleted是要替换的Fragment类,所以在FRagmentActivity或ACtivity类中使用xml这样的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/lin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</LinearLayout>
当您想要替换时使用此
FragmentTransaction ft = Activity.FragmentManager.BeginTransaction();
UploadCompleted ucompleted = new UploadCompleted();
ft.Replace(Resource.Id.lin, ucompleted, "uploadcompleted");
ft.AddToBackStack(null);
ft.Commit();