2013-08-19 54 views
0

我有一堆不同的庫試圖一起工作,我非常接近,但只有一個問題。MvvmCross,ActionBarSherlock和DialogFragment的對話框值

我創建了一個名爲SherlockDialogFragment類從SherlockFragment繼承(而不是使用SherlockListFragment - 這是因爲與同時覆蓋here鍵盤問題)。這裏是我的代碼:

public class SherlockDialogFragment : SherlockFragment 
{ 
    public RootElement Root 
    { 
     get { return View.FindViewById<LinearDialogScrollView>(Android.Resource.Id.List).Root; } 
     set { View.FindViewById<LinearDialogScrollView>(Android.Resource.Id.List).Root = value; } 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var ignored = base.OnCreateView(inflater, container, savedInstanceState); 
     var layout = new LinearLayout(Activity) { Orientation = Orientation.Vertical }; 
     var scroll_view = new LinearDialogScrollView(Activity) 
     { 
      Id = Android.Resource.Id.List, 
      LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent) 
     }; 
     layout.AddView(scroll_view); 
     return layout; 
    } 
} 

我然後做創建一個EventSource的類,它從該繼承的經常的事,但也使用IMvxEventSourceFragment,那麼實際的片段類(我稱之爲MvxSherlockDialogFragment),它繼承了EventSource的類,以及IMvxFragmentView

這一切工作正常(實際上我已經創建了一個SherlockDialogActivity以同樣的方式,它的罰款),但是一個問題是,當我用這個片段與標籤在屏幕上(我使用I類製備類似於以上稱爲MvxSherlockFragmentActivity)。使用對話框切換到選項卡時,即使使用預先填充的數據,視圖也可以正常顯示。 但是,當我從該片段/選項卡切換,然後返回時,問題是,對話框元素都具有相同的值。

在我特別的例子中,它是一個包含用戶名和密碼的登錄頁面。當我第一次進入片段時,一切都很好。當我出去並返回時,密碼值位於用戶名字段和密碼字段中。

我敢肯定它得到的東西做的SherlockDialogFragment類 - 在SherlockDialogActivity類我也有這個位:

 public override void OnContentChanged() 
    { 
     base.OnContentChanged(); 
     var list = FindViewById<LinearDialogScrollView>(Android.Resource.Id.List); 

     if (list == null) 
     { 
      throw new RuntimeException("Your content must have a ViewGroup whose id attribute is Android.Resource.Id.List and is of type LinearDialogScrollView"); 
     } 

     list.AddViews(); 
    } 

然而,這並不在一個片段工作,因爲沒有OnContentChanged事件。此外,另一個區別是在SherlockDialogActivity中,佈局正在創建ONCEOnCreate事件中 - 但是在SherlockFragmentActivity中,每次查看片段時都會創建它。我知道這可能不是最好的方式,但我想這樣做在OnCreate並將其保存在一個變量,然後返回變量OnCreateView,但是Android 不喜歡那個 ...

+0

這些選項卡是如何創建的? TabHost?也許Mvx是以這種方式建造的?你如何約束對話元素? – Cheesebaron

+0

聽起來像是在https://github.com/slodge/MvvmCross/blob/v3/CrossUI/CrossUI.Droid/Dialog/LinearDialogScrollView.cs或更低版本中的錯誤 - 也許嘗試添加一些跟蹤它或你的元素找出爲什麼它會讓你的對話更加平坦。有一些來自@csteeg的convertview更改,我還沒有整合。 – Stuart

+0

這些標籤通過'AddTab'抽象void來添加。通過'CreateInlineBindingTarget'綁定。斯圖爾特 - 請讓我知道我應該追蹤 - 還,隨意點我的'LinearDialogScrollView'更新的代碼的方向,我可以給一個去。愛你的工作! – benpage

回答

0

好,我覺得像個白癡。我在OnViewCreated上創建/綁定 - 但是我需要在OnStart中完成所有綁定 - 我想我正在跟蹤Stuart的一些(可能是舊的)示例代碼。

很明顯,對於一個常規活動,我使用OnCreate,但這不適用於一個片段,因爲視圖沒有在那裏初始化 - 它初始化爲OnCreateView

所以爲了將來的參考 - 做所有綁定OnStart

相關問題