2016-10-01 2 views
0

android.support.v4.app.Fragment (자 마린 C 번호)에 캐스트 할 수없는하지만 문제내가 <code>DrawerLayout</code></p> <p>을하려고

여기
Java.Lang.ClassCastException: tieit.droid.MyListFragment cannot be cast to android.support.v4.app.Fragment 

MainViewModel 코드에 내 코드에 직면 :

using MvvmCross.Core.ViewModels; 
using System; 
using System.Collections.Generic; 

namespace TieiT.Core 
{ 
    public class MainViewModel : MvxViewModel 
    { 
     readonly Type[] _menuItemTypes = { 
      typeof(MyListViewModel), 
      typeof(MySettingsViewModel), 
     }; 

     public IEnumerable<string> MenuItems { get; private set; } = new [] { "My List", "My Settings" }; 

     public void ShowDefaultMenuItem() 
     { 
      NavigateTo (0); 
     } 

     public void NavigateTo (int position) 
     { 
      ShowViewModel (_menuItemTypes [position]); 
     } 
    } 

    public class MenuItem : Tuple<string, Type> 
    { 
     public MenuItem (string displayName, Type viewModelType) 
      : base (displayName, viewModelType) 
     {} 

     public string DisplayName 
     { 
      get { return Item1; } 
     } 

     public Type ViewModelType 
     { 
      get { return Item2; } 
     } 
    } 
} 

나는 오류, 그것은이되도록 만든다있다 :

public void NavigateTo (int position) 
    { 
     ShowViewModel (_menuItemTypes [position]); 
    } 
01 여기 23,516,

는 MyListFragment입니다 :

using Android.OS; 
using Android.Runtime; 
using Android.Views; 

using MvvmCross.Droid.Shared.Attributes; 
using MvvmCross.Droid.FullFragging.Fragments; 


using TieiT.Core; 

namespace TieiT.Droid 
{ 
    [MvxFragmentAttribute(typeof(MainViewModel), Resource.Id.frameLayout)] 
    [Register("tieit.droid.MyListFragment")] 
    public class MyListFragment : MvxFragment<MyListViewModel> 
    { 
     public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 
      return inflater.Inflate(Resource.Layout.MyListView, container, false); 
     } 
    } 
} 

을 그리고 여기에 내가 DrawerLayout을 보여줄 필요가 내 활동 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using MvvmCross.Droid.Support.V7.AppCompat; 
using TieiT.Droid; 
using Android.Support.V7.App; 
using Android.Support.V4.Widget; 
using Toolbar = Android.Support.V7.Widget.Toolbar; 
using Fragment = Android.Support.V4.App.Fragment; 

using TieiT.Core; 

namespace TieiT.Droid.Views 
{ 
    [Activity] 
    public class GeneralInfo : MvxCachingFragmentCompatActivity<MainViewModel> 
    { 

     ActionBarDrawerToggle _drawerToggle; 

     ListView _drawerListView; 

     DrawerLayout _drawerLayout; 

     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.GeneralInfoPage); 
      var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); 
      SetSupportActionBar(toolbar); 

      SupportActionBar.SetDisplayHomeAsUpEnabled(false); 

      _drawerListView = FindViewById<ListView>(Resource.Id.drawerListView); 
      _drawerListView.ItemClick += (s, e) => ShowFragmentAt(e.Position); 
      _drawerListView.Adapter = new ArrayAdapter<string>(this, global::Android.Resource.Layout.SimpleListItem1, ViewModel.MenuItems.ToArray()); 

      _drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout); 

      _drawerToggle = new ActionBarDrawerToggle(this, _drawerLayout, Resource.String.OpenDrawerString, Resource.String.CloseDrawerString); 

      _drawerLayout.SetDrawerListener(_drawerToggle); 

      ShowFragmentAt(0); 
     } 

     void ShowFragmentAt(int position) 
     { 
      ViewModel.NavigateTo(position); 

      Title = ViewModel.MenuItems.ElementAt(position); 

      _drawerLayout.CloseDrawer(_drawerListView); 
     } 

     protected override void OnPostCreate(Bundle savedInstanceState) 
     { 
      _drawerToggle.SyncState(); 

      base.OnPostCreate(savedInstanceState); 
     } 

     public override bool OnOptionsItemSelected(IMenuItem item) 
     { 
      if (_drawerToggle.OnOptionsItemSelected(item)) 
       return true; 

      return base.OnOptionsItemSelected(item); 
     } 
    } 
} 

나는이 오류를 해결할 수 방법은?

감사합니다.

UPDATE

내 홈페이지 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
<!-- content must go before menu because of z-order --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <include 
      layout="@layout/toolbar" /> 
     <FrameLayout 
      android:id="@+id/frameLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 
<!-- menu --> 
    <ListView 
     android:id="@+id/drawerListView" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:background="?android:attr/windowBackground" /> 
</android.support.v4.widget.DrawerLayout> 

그리고 여기에 내가 콘솔에서 가지고있는 경우 : MvvmCross.Droid.FullFragging 지원 렸기 때문에, 당신이 잘못 포장 설치된

[ERROR] FATAL UNHANDLED EXCEPTION: Java.Lang.ClassCastException: tieit.droid.MyListFragment cannot be cast to android.support.v4.app.Fragment 
10-01 19:52:15.838 E/mono-rt (3039): --- End of managed Java.Lang.ClassCastException stack trace --- 
10-01 19:52:15.838 E/mono-rt (3039): java.lang.ClassCastException: tieit.droid.MyListFragment cannot be cast to android.support.v4.app.Fragment 
+0

레이아웃 xml 및 스택 추적을 질문에 추가하십시오. –

+0

업데이트 된 게시물 @StefanWanitzek – Eugene

답변

1

Fragment 그리고 전송하려고하면 오류가 발생합니다. Android.Support.V4.App.Fragment을 사용하는 경우 MvvmCross.Droid.Support.V7.Fragging'MvvmCross.Droid.V7.AppCompat'을 설치해야합니다.