c# - Navigation Drawer with tab in main page android xamarin -
i make app navigation drawer. want add tab in main page when run app, have error in
system.nullreferenceexception: object reference not set instance of object.
actionbar.navigationmode = actionbarnavigationmode.tabs;
how add tab? code is:
namespace navigationdrawerlayout { [activity(label = "navigationdrawerlayout", theme = "@style/theme.designdemo", mainlauncher = true, icon = "@drawable/icon")] public class mainactivity : appcompatactivity { drawerlayout drawerlayout; navigationview navigationview; protected override void oncreate(bundle bundle) { base.oncreate(bundle); // set our view "main" layout resource setcontentview(resource.layout.main); actionbar.navigationmode = actionbarnavigationmode.tabs; // add tabs action bar addtab("tab one"); addtab("tab two"); addtab("tab three"); drawerlayout = findviewbyid<drawerlayout>(resource.id.drawer_layout); // create actionbardrawertoggle button , add toolbar var toolbar = findviewbyid<v7toolbar>(resource.id.toolbar); setsupportactionbar(toolbar); var drawertoggle = new actionbardrawertoggle(this, drawerlayout, toolbar, resource.string.drawer_open, resource.string.drawer_close); drawerlayout.setdrawerlistener(drawertoggle); drawertoggle.syncstate(); navigationview = findviewbyid<navigationview>(resource.id.nav_view); setupdrawercontent(navigationview); } private void addtab(string tabtext) { android.app.actionbar.tab tab = actionbar.newtab(); tab.settext(tabtext); tab.tabselected += ontabselected; actionbar.addtab(tab); } private void ontabselected(object sender, android.app.actionbar.tabeventargs args) { var currenttab = (android.app.actionbar.tab)sender; if (currenttab.position == 0) { } else { } } void setupdrawercontent(navigationview navigationview) { navigationview.navigationitemselected += (sender, e) => { e.menuitem.setchecked(true); drawerlayout.closedrawers(); }; } public override bool oncreateoptionsmenu(imenu menu) { navigationview.inflatemenu(resource.menu.nav_menu); return true; } } }
main.axml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.drawerlayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_height="match_parent" android:layout_width="fill_parent" android:fitssystemwindows="true"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/toolbar" /> </linearlayout> <android.support.design.widget.navigationview android:id="@+id/nav_view" android:layout_height="match_parent" android:layout_width="300dp" android:layout_gravity="start" android:fitssystemwindows="true" app:headerlayout="@layout/nav_header" /> </android.support.v4.widget.drawerlayout> </linearlayout>
styles.xml
<?xml version="1.0" encoding="utf-8" ?> <resources> <style name="theme.designdemo" parent="base.theme.designdemo"> </style> <style name="base.theme.designdemo" parent="theme.appcompat.light.noactionbar"> <item name="colorprimary">@color/colorprimary</item> <item name="colorprimarydark">@color/colorprimarydark</item> </style> </resources>
system.nullreferenceexception: object reference not set instance of object.
when want add actionbar
tab, activity
should have actionbar
first, in theme.designdemo
, have delete in activity
:
<style name="base.theme.designdemo" parent="theme.appcompat.light.noactionbar">
it means can't actionbar
in activity
, , have use toolbar
instead. that's why throws nullreferenceexception
exception.
how add tab?
with api 21 method actionbarnavigationmode.tabs
deprecated. use tablayout in design support library.
its usage simple, add in toolbar.axml
:
toolbar.axml
:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.coordinatorlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" ... > <android.support.design.widget.appbarlayout ... android:theme="@style/themeoverlay.appcompat.dark.actionbar"> <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:elevation="4dp" android:background="@color/colorprimary" /> <android.support.design.widget.tablayout android:id="@+id/tablayout" android:layout_height="wrap_content" android:layout_width="match_parent"> <android.support.design.widget.tabitem android:text="tab one"/> <android.support.design.widget.tabitem android:text="tab two"/> <android.support.design.widget.tabitem android:text="tab three"/> </android.support.design.widget.tablayout> </android.support.design.widget.appbarlayout> </android.support.design.widget.coordinatorlayout>
use in code :
tablayout tablayout = findviewbyid<tablayout>(resource.id.tablayout); tablayout.setupwithviewpager(viewpager); //the one-stop shop setting tablayout viewpager
Comments
Post a Comment