Tôi đang cố gắng thiết lập các tab như Google Play, tôi đang theo dõi this guide và chuyển đổi thành C#, nhưng ngoại lệ được ném khi gọi tabLayout.SetupWithViewPager
. Mã cho hoạt động này là thế này:Xamarin Android TabLayout gọi SetupWithViewPager ném ngoại lệ
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);
}
}
các stacktrace cho ngoại lệ là:
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)
tôi không sử dụng bất cứ nơi nào <merge />
vì vậy tôi đoán rằng đó là nội bộ đến một trong các điều khiển? Tôi đoán rằng đây chỉ là một vấn đề với Xamarin Android (hoặc tôi đã thực hiện một sai lầm ở đâu đó) như có vẻ là một số triển khai Java rất giống nhau mà tôi giả định công việc ok!
Tôi đã tải mẫu đầy đủ lên GitHub.
mẫu của bạn trên GitHub, sau khi thay đổi dòng 36 trong PageFragment.cs để làm cho nó xây dựng trong VS2013, xây dựng và chạy tốt ở đây. – Cheesebaron
Cảm ơn @Cheesebaron, chỉ cần thử nó sau khi xóa sạch các thư mục bin và obj và nó hoạt động tốt ở đây bây giờ là tốt. – ChrisWay
OK, rất vui khi biết nó đã hoạt động cho bạn. Nếu bạn cần một mẫu hoàn chỉnh hơn cho các công cụ thiết kế mới, thanh công cụ, vv Hãy xem https://github.com/xamarin/monodroid-samples/tree/master/android5.0/Cheesesquare – Cheesebaron