android - Error inflating class fragment in activity layout -
i have layout activity:
<fragment android:name="com.myapp.fragment1" android:id="@+id/fragment1" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout="@layout/fragment1" /> <fragment android:name="com.myapp.listfragment1" android:id="@+id/fragment2" android:layout_width="match_parent" android:layout_height="match_parent"/> </relativelayout>
the first fragment (fragment1) extends fragment, whilst second fragment extends listfragment. don't have layout listfragment.
the activity code is:
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_info); }
an exception thrown on setcontentview:
error inflating class fragment
the listfragment code is:
@override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setlistadapter(new mylistadapter(getactivity(), prices)); } @override public void onviewcreated(view view, bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); getlistview().setdivider(null); }
what correct way have multiple fragments in activity?
you can using sectionspageradapter
(swipe view) or navigationdrawer
(navigation drawer). have used swipe view 1 of applications. here codes.
mainactivity.java
public class mainactivity extends appcompatactivity implements actionbar.tablistener { sectionspageradapter msectionspageradapter; /** * {@link viewpager} host section contents. */ viewpager mviewpager; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // set action bar. final actionbar actionbar = getsupportactionbar(); actionbar.setnavigationmode(actionbar.navigation_mode_tabs); // create adapter return fragment each of 3 // primary sections of activity. msectionspageradapter = new sectionspageradapter(getsupportfragmentmanager()); // set viewpager sections adapter. mviewpager = (viewpager) findviewbyid(r.id.pager); mviewpager.setadapter(msectionspageradapter); // when swiping between different sections, select corresponding // tab. can use actionbar.tab#select() if have // reference tab. mviewpager.setonpagechangelistener(new viewpager.simpleonpagechangelistener() { @override public void onpageselected(int position) { actionbar.setselectednavigationitem(position); } }); //getting icons in icons veriable final int[] icons = new int[]{ r.drawable.chat, r.drawable.friends, r.drawable.profile, }; // each of sections in app, add tab action bar. (int = 0; < msectionspageradapter.getcount(); i++) { // create tab text corresponding page title defined // adapter. specify activity object, implements // tablistener interface, callback (listener) when // tab selected. actionbar.addtab( actionbar.newtab() .seticon(getresources().getdrawable(icons[i])).settablistener(this)); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // take appropriate action each action item click switch (item.getitemid()) { case r.id.action_search: // search action return true; default: return super.onoptionsitemselected(item); } } @override public void ontabselected(actionbar.tab tab, fragmenttransaction fragmenttransaction) { // when given tab selected, switch corresponding page in // viewpager. mviewpager.setcurrentitem(tab.getposition()); } @override public void ontabunselected(actionbar.tab tab, fragmenttransaction fragmenttransaction) { } @override public void ontabreselected(actionbar.tab tab, fragmenttransaction fragmenttransaction) { } /** * {@link fragmentpageradapter} returns fragment corresponding * 1 of sections/tabs/pages. */ public class sectionspageradapter extends fragmentpageradapter { public sectionspageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int index) { switch (index) { case 0: // top rated fragment activity return new chatfragment(); case 1: return new friendsfragment(); // games fragment activity //return new profilefragment(); case 2: // movies fragment activity //return new friendsfragment(); return new profilefragment(); } return null; } @override public int getcount() { // show 3 total pages. return 3; } @override public charsequence getpagetitle(int position) { locale l = locale.getdefault(); switch (position) { case 0: return getstring(r.string.chat_tab).touppercase(l); case 1: return getstring(r.string.friends_tab).touppercase(l); case 2: return getstring(r.string.profile_tab).touppercase(l); } return null; } } /** * placeholder fragment containing simple view. */ public static class placeholderfragment extends fragment { /** * fragment argument representing section number * fragment. */ private static final string arg_section_number = "section_number"; /** * returns new instance of fragment given section * number. */ public static placeholderfragment newinstance(int sectionnumber) { placeholderfragment fragment = new placeholderfragment(); bundle args = new bundle(); args.putint(arg_section_number, sectionnumber); fragment.setarguments(args); return fragment; } public placeholderfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_main, container, false); return rootview; } } }
friendsfragment.java
public class friendsfragment extends fragment { @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_friends, container, false); return rootview; } }
activity_main.xml
<android.support.v4.view.viewpager xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity" />
fragment_main.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin" tools:context=".mainactivity$placeholderfragment"> <textview android:id="@+id/section_label" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </relativelayout>
fragment_friends.xml
<?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"> <textview android:id="@+id/email_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/friends_tab" android:layout_gravity="center" android:gravity="center"/> </linearlayout>
this sample code of project. can use own code java or xml. here tried show how call fragments in mainactivity
using swipe view. hope helps.
Comments
Post a Comment