C# 替换片段-片段类的新实例是';t实例化

C# 替换片段-片段类的新实例是';t实例化,c#,android,android-fragments,xamarin,C#,Android,Android Fragments,Xamarin,我试图用另一个片段替换一个片段,代码行如下: FragmentTransaction ft = Activity.FragmentManager.BeginTransaction(); UploadCompleted ucompleted = new UploadCompleted(); ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");

我试图用另一个片段替换一个片段,代码行如下:

FragmentTransaction ft = Activity.FragmentManager.BeginTransaction();
            UploadCompleted ucompleted = new UploadCompleted();
            ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");
            ft.AddToBackStack(null);
            ft.Commit();
正在使用活动的片段管理器替换另一个片段中的片段。问题是被替换片段的OnCreate和OnCreateView方法没有被调用,并且片段的一个旧实例(我第一次替换它时实例化的片段)被实例化,这就是为什么我无法将任何新值传递给被替换片段的原因。知道我做错了什么吗?我是android开发新手,所以我对片段的了解不是很好

ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted");
在这个R.id中,是放置在FRagmentActivity或Activity中的布局,UploadCompleted是要替换的fragmentclass,所以在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> 

根据您的逻辑,应该调用新片段的
OnCreate
OnCreateView
。在
Activity
级别执行
FragmentTransaction
是一种很好的做法,而不是在片段级别执行。在上面的代码片段中,您正在从已经显示的片段中创建新片段的实例,并从父活动中替换它自己。这不是推荐的方法。我建议进行以下更改

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();
    } 
}

这是切换片段的良好实践。这可能也会解决您的问题

这就是我实际正在做的事情。在ft.Replace(Resource.Id.lin,ucompleted,“uploadcompleted”);什么是Resource.Id使用R.Id ft.Replace(R.Id.lin,ucompleted,“uploadcompleted”);对不起,我不明白你的意思。你是说我应该用R.Id替换Resource.Id吗?我正在使用C#与xamarin一起构建应用程序,因此xamarin中的语法与Java略有不同。
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();
    } 
}