Xamarin Android TabLayout 调用 SetupWithViewPager 抛出异常
Xamarin Android TabLayout calling SetupWithViewPager throws exception
我正在尝试设置像 Google Play 这样的选项卡,我正在关注 this guide 并转换为 C#,但是在调用 tabLayout.SetupWithViewPager
时抛出异常。 activity 的代码是这样的:
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);
}
}
异常的堆栈跟踪是:
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.access0(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)
我没有在任何地方使用 <merge />
,所以我认为它是内部控件之一?我认为这只是 Xamarin Android 的一个问题(或者我在某处犯了一个错误)因为似乎有几个非常相似的 Java 实现我认为工作正常!
我已将完整示例上传至 GitHub。
在清除 bin 和 obj 目录后出现了一些幻象错误,现在它可以正常工作了。
出于其他原因,我也遇到了同样的问题,如果您包含任何未实现 onCreateview() 的嵌套片段,则可能会出现此问题
因此,如果您在 viewPager 中包含嵌套片段,请确保它们都以正确的方式实现
希望这能激发任何面临同样问题的人
我正在尝试设置像 Google Play 这样的选项卡,我正在关注 this guide 并转换为 C#,但是在调用 tabLayout.SetupWithViewPager
时抛出异常。 activity 的代码是这样的:
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);
}
}
异常的堆栈跟踪是:
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.access0(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)
我没有在任何地方使用 <merge />
,所以我认为它是内部控件之一?我认为这只是 Xamarin Android 的一个问题(或者我在某处犯了一个错误)因为似乎有几个非常相似的 Java 实现我认为工作正常!
我已将完整示例上传至 GitHub。
在清除 bin 和 obj 目录后出现了一些幻象错误,现在它可以正常工作了。
出于其他原因,我也遇到了同样的问题,如果您包含任何未实现 onCreateview() 的嵌套片段,则可能会出现此问题
因此,如果您在 viewPager 中包含嵌套片段,请确保它们都以正确的方式实现
希望这能激发任何面临同样问题的人