2016-04-30 115 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(); 
    } 
} 

這是切換片段的好習慣。這也許可以解決你的問題

相關問題