2016-04-30 72 views
1

我试着用下面的代码行与另一个片段取代片段:更换一个片段 - 片段新的类实例不是实例

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
ft.Replace(Resource.Id.CameraFragmentContainer, ucompleted, "uploadcompleted"); 

在这种R.id是您在片段活动或活动和UploadCompleted放置布局是要替换所以在FRagmentActivity或活动课使用这样的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(); 
+0

这就是我实际上在做的。 –

+0

在ft.Replace(Resource.Id.lin,ucompleted,“uploadcompleted”);什么是Resource.Id使用R.id ft.Replace(R.Id.lin,ucompleted,“uploadcompleted”); –

+0

对不起,我不明白你的意思。你是说我应该用R.Id替换Resource.Id吗?我使用C#构建了xamarin应用程序,因此Xamarin中的语法与Java有点不同。 –

1

按你的逻辑,OnCreate和新片段的OnCreateView应该被调用。 FragmentTransactionActivity级别而不是在片段级别上执行是一个好做法。在上面的代码片段中,您将从已显示的片段内创建新片段的实例,并从父活动中替换它自己。这不是推荐的方法。我会建议进行以下更改。

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

这是切换片段的好习惯。这也许可以解决你的问题

相关问题