2015-07-28 8 views
5

Próbuję skonfigurować karty takie jak Google Play, podążam za this guide i konwertuję do C#, ale generowany jest wyjątek podczas wywoływania tabLayout.SetupWithViewPager. Kod dla działalności to:Xamarin Android TabLayout wywoływanie SetupWithViewPager zgłasza wyjątek

public class MainActivity : FragmentActivity 
{ 
    protected override void OnCreate(Bundle bundle) { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 

     var viewPager = FindViewById<ViewPager>(Resource.Id.viewpager); 
     viewPager.Adapter = new SampleFragmentPagerAdapter(SupportFragmentManager, this); 

     var tabLayout = FindViewById<TabLayout>(Resource.Id.sliding_tabs); 
     tabLayout.SetupWithViewPager(viewPager); 
    } 
} 

StackTrace za wyjątkiem jest:

07-28 23:08:39.068 I/MonoDroid(4040): UNHANDLED EXCEPTION: 
07-28 23:08:39.071 I/MonoDroid(4040): Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown. 
07-28 23:08:39.071 I/MonoDroid(4040): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() <IL 0x00011, 0x0004b> 
07-28 23:08:39.071 I/MonoDroid(4040): at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android.Runtime.JValue*) [0x00063] in /Users/builder/data/lanes/1879/5f55a9ef/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:571 
07-28 23:08:39.071 I/MonoDroid(4040): at Android.Support.Design.Widget.TabLayout.SetupWithViewPager (Android.Support.V4.View.ViewPager) <IL 0x00066, 0x001c3> 
07-28 23:08:39.071 I/MonoDroid(4040): at TabTest.MainActivity.OnCreate (Android.OS.Bundle) [0x00040] in E:\VS Projects\TabTest\TabTest\MainActivity.cs:28 
07-28 23:08:39.071 I/MonoDroid(4040): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/1879/5f55a9ef/source/monodroid/src/Mono.Android/platforms/android-21/src/generated/Android.App.Activity.cs:2707 
07-28 23:08:39.071 I/MonoDroid(4040): at (wrapper dynamic-method) object.1f96a184-9cb6-4d05-8516-4c4d2e85d8d7 (intptr,intptr,intptr) <IL 0x00017, 0x00027> 
07-28 23:08:39.071 I/MonoDroid(4040): --- End of managed exception stack trace --- 
07-28 23:08:39.071 I/MonoDroid(4040): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true 
07-28 23:08:39.071 I/MonoDroid(4040): at android.view.LayoutInflater.inflate(LayoutInflater.java:475) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout$TabView.update(TabLayout.java:1196) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout$TabView.<init>(TabLayout.java:1112) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.createTabView(TabLayout.java:612) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.addTabView(TabLayout.java:646) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.addTab(TabLayout.java:345) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.addTab(TabLayout.java:320) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.setTabsFromPagerAdapter(TabLayout.java:601) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:575) 
07-28 23:08:39.071 I/MonoDroid(4040): at md5be39043e4dbb7988fedb01f9386df4d7.MainActivity.n_onCreate(Native Method) 
07-28 23:08:39.071 I/MonoDroid(4040): at md5be39043e4dbb7988fedb01f9386df4d7.MainActivity.onCreate(MainActivity.java:28) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.Activity.performCreate(Activity.java:5990) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.ActivityThread.access$800(ActivityThread.java:151) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.os.Handler.dispatchMessage(Handler.java:102) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.os.Looper.loop(Looper.java:135) 
07-28 23:08:39.071 I/MonoDroid(4040): at android.app.ActivityThread.main(ActivityThread.java:5254) 
07-28 23:08:39.071 I/MonoDroid(4040): at java.lang.reflect.Method.invoke(Native Method) 
07-28 23:08:39.071 I/MonoDroid(4040): at java.lang.reflect.Method.invoke(Method.java:372) 
07-28 23:08:39.071 I/MonoDroid(4040): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
07-28 23:08:39.071 I/MonoDroid(4040): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

nie używam <merge /> nigdzie więc przypuszczać, że znajduje się wewnątrz jednej z kontroli? Zakładam, że jest to tylko problem z Xamarinem z Androidem (albo gdzieś się pomyliłem), ponieważ wydaje się, że jest kilka bardzo podobnych implementacji Java, które zakładam, że działają dobrze!

Przesłałem pełną próbkę do GitHub.

+0

próbkę na GitHub, po zmianie linii 36 w PageFragment.cs aby zbudować w VS2013, buduje i działa dobrze tutaj. – Cheesebaron

+0

Dzięki @Cheesebaron, wypróbowałem to po wyczyszczeniu katalogów bin i obj i działa to teraz również dobrze. – ChrisWay

+0

OK, cieszę się, że udało się. Jeśli potrzebujesz bardziej kompletnej próbki dla nowego projektu, paska narzędzi itp. Zajrzyj na https://github.com/xamarin/monodroid-samples/tree/master/android5.0/Cheesesquare – Cheesebaron

Odpowiedz

34

Trochę błędu fantomowego, jak po wyczyszczeniu katalogów bin i obj, które teraz działa zgodnie z oczekiwaniami.

+3

DZIĘKI za to. Szukałem dokładnie tego samego zachowania i bez twojego stosu, prawdopodobnie nigdy bym tego nie znalazł! –

+1

Zaoszczędziłeś mi dużo czasu, dziękuję – Escobar5

+1

Uratowałeś mi godziny bracie .. dziękuję .. –

1

mam ten sam problem dla pylników powodu tego problemu może podnieść jeśli zawierają żadnych zagnieżdżonych fragment nie wdrożyć onCreateview()

więc jeśli to zagnieżdżony fragment wewnątrz viewPager upewnić, wszystkie one wdrożone w prawidłowy sposób

nadzieję zainspirować któregokolwiek twarzy sam problem