2

저는 Xamarin과 MvvmCross를 사용하여 monodroid 앱을 작성하고 있습니다.Monodroid App 용 MvvmCross + ActionBar

내 앱에서 MvvmCross와 ActionBar를 모두 사용하고 싶습니다. ActionBar (Legacy 또는 Sherlock)는 사용자 지정 활동을 상속해야했습니다. 이 경우 MvxActivity와 CustomBarActivity 모두에서 내 Activity를 상속받지 못했습니다.

MvxActivity로 작업 표시 줄을 표시하는 방법은 무엇입니까?

+0

가능한 중복. co.kr/questions/16801728/actionbarsherlock-with-latest-mvvmcross) – Stuart

+0

@stuart, 아니요 중복되지 않음 - actionbarsherlock 와 액션 바는 다릅니다. – Tim

답변

0

Mvx와 같은 방식으로 액션 바를 구현하려고했는데, 내 ViewModel에 액세스 할 수 있도록 TabActivity에서 속성을 만들었습니다. 내 ViewModel에서 열거하고 만들 수있는 작업 표시 줄 요소 목록이 있습니다. 나는 MvvMcross가 액션 바를 함축시키는 방법 (스튜어트에게 물어보십시오)과 같은 방법이 더 많을 것이라고 확신합니다.하지만 이것은 꽤 잘됩니다. 귀하의 활동을 TabActivity로부터 상속받는 것을 잊지 마십시오.

재산권 :

protected MvvMAppiAppi.Core.ViewModels.NavigationBarViewModel NavigationBarViewModel { 
      get{ return base.ViewModel as MvvMAppiAppi.Core.ViewModels.NavigationBarViewModel; } 
     } 

코드 : 탭을 만들 수

 protected override void OnCreate (Bundle bundle) 
       { 
        base.OnCreate (bundle); 
        SetContentView (Resource.Layout.view_NavigationBar); 

        //TabHost.TabSpec spec; 
        Intent intent; 

        foreach (var item in NavigationBarViewModel.MenuTabs) { 
         switch (item.PresentationMode) { 
          case "listByCategory": 
         { 
          var vm = NavigationBarViewModel.ListPresentationViewModel; 
          vm.CategorieId = item.id; 
          intent = this.CreateIntentFor (vm); 
         } 
          break; 
        ... 
        ... 
        ... 
        ... 
       } 
    intent.AddFlags (ActivityFlags.NewTask); 
    setUpTab (intent, item.Name, ResourceManager.I.getResId (item.ResourceName)); 

    } 

기능 : // 유래 : (HTTP [최신 MVVMCross와 ActionBarSherlock의]의

private void setUpTab (Intent view, string tag, int Resource) 
     { 
      View tabview = createTabView (this.TabHost.Context, tag, Resource); 
      TabHost.TabSpec spec = this.TabHost.NewTabSpec (tag).SetIndicator (tabview).SetContent (view); 

      this.TabHost.AddTab (spec); 
     } 

     private View createTabView (Context context, String text, int resource) 
     { 
      View view = LayoutInflater.From (context).Inflate (Resource.Layout.tabs_bg, null); 
      TextView tv = view.FindViewById<TextView> (Resource.Id.tabsText); 
      ImageView iv = view.FindViewById<ImageView> (Resource.Id.image); 
      iv.SetImageResource (resource); 
      tv.SetText (text, TextView.BufferType.Normal); 
      return view; 
     } 
관련 문제