android xml: Error inflating class fragment -
i having problem fragments.i developing app 360 security , having problem implementing fragments ,getting "binary xml file line #1: error inflating class fragment".
here xml file.i have tried every solution please me.
thanks in advance.
<fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/item_list" android:name="sabby.completesecurity.mainlistfragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".itemlistactivity" tools:layout="@android:layout/list_content" /> this activity file:
package sabby.completesecurity; import android.app.activity; import android.app.alertdialog; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.bundle; import android.support.v4.app.fragmentactivity; import android.view.menu; import android.view.menuitem; import android.widget.framelayout; import android.widget.imageview; import sabby.completesecurity.r; public class mainactivitycache extends fragmentactivity implements sabby.completesecurity.maincallbacks { private boolean misdualpane; private boolean misartshowed = false; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main_cache); misdualpane = findviewbyid(r.id.item_detail_container) != null; //show art when no fragment showed, make sure no detail fragment present. if (misdualpane && getfragmentmanager().findfragmentbytag(sabby.completesecurity.detailfragment.fragment_tag) == null) { imageview imageview = new imageview(this); imageview.setimageresource(r.mipmap.ic_launcher); imageview.setscaletype(imageview.scaletype.fit_center); ((framelayout) findviewbyid(r.id.item_detail_container)).addview(imageview); misartshowed = true; } } @override public void onitemselected(string packagename) { if (misdualpane) { //hide art when fragment showed. if (misartshowed) { ((framelayout) findviewbyid(r.id.item_detail_container)).removeallviews(); misartshowed = false; } getfragmentmanager() .begintransaction() .replace(r.id.item_detail_container, detailfragment.getinstance(packagename), detailfragment.fragment_tag) .commit(); } else { intent intent = new intent(this, detailactivity.class); intent.putextra(detailfragment.extra_package_name, packagename); startactivity(intent); } } @override protected void onstart() { super.onstart(); registerreceiver(receiver, getintentfilter()); } @override protected void onstop() { super.onstop(); unregisterreceiver(receiver); } private void showaboutdialog() { new alertdialog.builder(this) .settitle("about") .setview(getlayoutinflater().inflate(r.layout.about_dialog_message, null)) .setnegativebutton(android.r.string.ok, null) .show(); } /** * used update list if package added or removed. */ private intentfilter getintentfilter() { intentfilter filter = new intentfilter(); filter.adddatascheme("package"); filter.addaction(intent.action_package_changed); filter.addaction(intent.action_package_replaced); filter.addaction(intent.action_package_fully_removed); filter.addaction(intent.action_package_added); return filter; } enter code here broadcastreceiver receiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { mainlistfragment mainlistfragment = (mainlistfragment) getfragmentmanager().findfragmentbyid(r.id.item_list); if (mainlistfragment != null) mainlistfragment.loadlist(); } }; }
mainlistfragment.java
package sabby.completesecurity; import android.app.actionbar; import android.app.activity; import android.app.listfragment; import android.app.progressdialog; import android.content.context; import android.content.pm.applicationinfo; import android.content.pm.ipackagestatsobserver; import android.content.pm.packageinfo; import android.content.pm.packagemanager; import android.content.pm.packagestats; import android.graphics.drawable.drawable; import android.os.asynctask; import android.os.bundle; import android.os.remoteexception; import android.text.format.formatter; import android.view.layoutinflater; import android.view.menu; import android.view.menuinflater; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.baseadapter; import android.widget.imageview; import android.widget.sectionindexer; import android.widget.spinner; import android.widget.textview; import sabby.completesecurity.utils.utils; import java.lang.reflect.invocationtargetexception; import java.lang.reflect.method; import java.text.simpledateformat; import java.util.arraylist; import java.util.collections; import java.util.comparator; import java.util.date; import java.util.list; public class mainlistfragment extends listfragment implements adapterview.onitemclicklistener, adapterview.onitemselectedlistener { private static final int sort_name = 0; private static final int sort_pkg = 1; private static final int sort_domain = 2; private static final int sort_installation = 3; private static final int sort_size = 4; private static final string instance_state_sort_by = "sort_by"; private adapter madapter; private list<item> mitemlist = new arraylist<item>(); private int monsizefinisheditemcount; private packagemanager mpackagemanager; private progressdialog mprogressdialog; private layoutinflater mlayoutinflater; private maincallbacks mcallbacks; private context mcontext; private async masyncloader; private spinner mspinner; private boolean mspinnerlistenerauthorized; private simpledateformat msimpledateformat; private int msortby = 0; class item { applicationinfo applicationinfo; string label; long date; long size = -1l; } private int mcolorgrey1; private int mcolorgrey2; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sethasoptionsmenu(true); mprogressdialog = new progressdialog(mcontext); mprogressdialog.settitle(r.string.loading_apps); mprogressdialog.setprogressstyle(progressdialog.style_horizontal); mprogressdialog.setcancelable(false); //used prevent message not showing later mprogressdialog.setmessage(""); mpackagemanager = mcontext.getpackagemanager(); msimpledateformat = new simpledateformat("dd/mm/yyyy hh:mm:ss"); mcolorgrey1 = getresources().getcolor(r.color.grey_1); mcolorgrey2 = getresources().getcolor(r.color.grey_2); actionbar actionbar = getactivity().getactionbar(); actionbar.setdisplayshowcustomenabled(true); mspinner = new spinner(actionbar.getthemedcontext()); spinneradapter spinneradapter = new spinneradapter(actionbar.getthemedcontext(), r.array.sort_spinner_items, android.r.layout.simple_list_item_1); mspinner.setadapter(spinneradapter); mspinnerlistenerauthorized = false; mspinner.setonitemselectedlistener(this); actionbar.layoutparams layoutparams = new actionbar.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent); actionbar.setcustomview(mspinner, layoutparams); if (savedinstancestate != null) setsortby(savedinstancestate.getint(instance_state_sort_by, -1), false); } @override public void onstart() { super.onstart(); mspinner.setselection(msortby); } @override public void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putint(instance_state_sort_by, msortby); } private void ontaskended(list<item> list) { retainedfragment retainedfragment = (retainedfragment) getfragmentmanager().findfragmentbytag(retainedfragment.fragment_tag); retainedfragment.setlist(list); mitemlist = list; madapter.notifydatasetchanged(); if (getlistview().getadapter() == null) setlistadapter(madapter); } @override public void onviewcreated(view view, bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); getlistview().setonitemclicklistener(this); getlistview().setfastscrollenabled(true); madapter = new adapter(); retainedfragment retainedfragment = (retainedfragment) getfragmentmanager() .findfragmentbytag(retainedfragment.fragment_tag); if (retainedfragment == null) { retainedfragment = new retainedfragment(); getfragmentmanager() .begintransaction() .add(retainedfragment, retainedfragment.fragment_tag) .commit(); } if (retainedfragment.getlist() != null) { ontaskended(retainedfragment.getlist()); monsizefinisheditemcount = mitemlist.size(); //notify spinner size sort available spinneradapter adapter = (spinneradapter) mspinner.getadapter(); adapter.notifydatasetchanged(); } else loadlist(); } public void loadlist() { masyncloader = new async(); masyncloader.execute(); } @override public void onattach(activity activity) { super.onattach(activity); mcallbacks = (maincallbacks) activity; mcontext = activity; mlayoutinflater = activity.getlayoutinflater(); } @override public void ondetach() { super.ondetach(); if (masyncloader != null) masyncloader.cancel(true); mcallbacks = null; mcontext = null; mlayoutinflater = null; } @override public void onitemclick(adapterview<?> adapterview, view view, int i, long l) { if (mcallbacks != null) mcallbacks.onitemselected(mitemlist.get(i).applicationinfo.packagename); } @override public void oncreateoptionsmenu(menu menu, menuinflater inflater) { inflater.inflate(r.menu.fragment_main_list, menu); } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case r.id.action_refresh: loadlist(); return true; } return super.onoptionsitemselected(item); } @override public void onitemselected(adapterview<?> adapterview, view view, int i, long l) { if (mspinnerlistenerauthorized) setsortby(i, true); mspinnerlistenerauthorized = true; } /** * sort main list if provided value valid. * @param sort must 1 of sort_* * @param checkviews set if views have updated, eg. when restoring state, views aren't * created yet, value must false */ public void setsortby(int sort, boolean checkviews) { if (sort >= sort_name && sort <= sort_size) { msortby = sort; if (checkviews) { checkfastscroll(); sortapplicationlist(mitemlist, msortby); madapter.notifydatasetchanged(); } } } @override public void onnothingselected(adapterview<?> adapterview) { } private void checkfastscroll() { getlistview().setfastscrollenabled(msortby == sort_name); } public void sortapplicationlist(list<item> list, final int sortby) { collections.sort(list, new comparator<item>() { @override public int compare(item item1, item item2) { switch (sortby) { case sort_name: return item1.label.compareto(item2.label); case sort_pkg: return item1.applicationinfo.packagename.compareto(item2.applicationinfo.packagename); case sort_domain: boolean issystem1 = (item1.applicationinfo.flags & applicationinfo.flag_system) != 0; boolean issystem2 = (item2.applicationinfo.flags & applicationinfo.flag_system) != 0; return utils.comparebooleans(issystem1, issystem2); case sort_installation: //sort in decreasing order return -item1.date.compareto(item2.date); case sort_size: return -item1.size.compareto(item2.size); default: return 0; } } }); } /** * method called each item when has finished retrieving size * when items have finished, set size sort available in spinner, , invalidate * main list display sizes in ui. */ private void onitemfinishedsizeprocess() { monsizefinisheditemcount ++; if (monsizefinisheditemcount == mitemlist.size()) { getactivity().runonuithread(new runnable() { @override public void run() { spinneradapter adapter = (spinneradapter) mspinner.getadapter(); adapter.notifydatasetchanged(); madapter.notifydatasetchanged(); } }); } } class adapter extends baseadapter implements sectionindexer { class viewholder { imageview icon; textview label; textview packagename; textview version; textview issystemapp; textview date; textview size; iconasynctask iconloader; } string sections = "abcdefghijklmnopqrstuvwxyz"; @override public int getcount() { return mitemlist.size(); } @override public object getitem(int i) { return mitemlist.get(i); } @override public long getitemid(int i) { return i; } @override public view getview(int i, view view, viewgroup viewgroup) { viewholder holder; if (view == null) { view = mlayoutinflater.inflate(r.layout.main_list_item, null); holder = new viewholder(); holder.icon = (imageview) view.findviewbyid(r.id.icon); holder.label = (textview) view.findviewbyid(r.id.label); holder.packagename = (textview) view.findviewbyid(r.id.packagename); holder.version = (textview) view.findviewbyid(r.id.version); holder.issystemapp = (textview) view.findviewbyid(r.id.issystem); holder.date = (textview) view.findviewbyid(r.id.date); holder.size = (textview) view.findviewbyid(r.id.size); view.settag(holder); } else { holder = (viewholder) view.gettag(); holder.iconloader.cancel(true); } view.setbackgroundcolor(i % 2 == 0 ? mcolorgrey2 : mcolorgrey1); item item = mitemlist.get(i); applicationinfo info = item.applicationinfo; try { packageinfo packageinfo = mpackagemanager.getpackageinfo(info.packagename, 0); holder.version.settext(packageinfo.versionname); date date = new date(packageinfo.firstinstalltime); holder.date.settext(msimpledateformat.format(date)); } catch (packagemanager.namenotfoundexception e) { //do nothing } holder.iconloader = new iconasynctask(holder.icon, info); holder.iconloader.execute(); holder.label.settext(info.loadlabel(mpackagemanager)); holder.packagename.settext(info.packagename); boolean issystemapp = (info.flags & applicationinfo.flag_system) != 0; holder.issystemapp.settext(issystemapp ? getstring(r.string.system) : getstring(r.string.user)); if (item.size != -1l) holder.size.settext(formatter.formatfilesize(getactivity(), item.size)); return view; } @override public int getpositionforsection(int section) { (int = 0; < this.getcount(); i++) { string item = mitemlist.get(i).label; if (item.charat(0) == sections.charat(section)) return i; } return 0; } @override public int getsectionforposition(int i) { return 0; } @override public object[] getsections() { string[] sectionsarr = new string[sections.length()]; (int = 0; < sections.length(); i++) sectionsarr[i] = "" + sections.charat(i); return sectionsarr; } class iconasynctask extends asynctask<void, integer, drawable> { imageview imageview; applicationinfo info; iconasynctask(imageview imageview, applicationinfo info) { this.imageview = imageview; this.info = info; } @override protected void onpreexecute() { super.onpreexecute(); imageview.setvisibility(view.invisible); } @override protected drawable doinbackground(void... voids) { if (!iscancelled()) return info.loadicon(mpackagemanager); return null; } @override protected void onpostexecute(drawable drawable) { super.onpostexecute(drawable); imageview.setimagedrawable(drawable); imageview.setvisibility(view.visible); } } } class spinneradapter extends baseadapter { private context mcontext; private int mlayoutresid; private string[] mitems; public spinneradapter(context themedcontext, int arrayresid, int layoutresid) { mcontext = themedcontext; mitems = themedcontext.getresources().getstringarray(arrayresid); mlayoutresid = layoutresid; } @override public int getcount() { return mitems.length; } @override public object getitem(int i) { return null; } @override public long getitemid(int i) { return 0; } //it make no sense implement recycled view system because there 5 items in list @override public view getview(int i, view view, viewgroup viewgroup) { view = view.inflate(mcontext, mlayoutresid, null); if (view instanceof textview) ((textview) view).settext(mitems[i]); return view; } /** * set sort_by_size item disabled if items haven't retrieved them size. */ @override public boolean isenabled(int position) { return position != sort_size || mitemlist != null && monsizefinisheditemcount == mitemlist.size(); } } class async extends asynctask<void, async.progress, list<item>> { class progress { string label; int totalsize; } @override protected void onpreexecute() { super.onpreexecute(); mprogressdialog.show(); } @override protected list<item> doinbackground(void... voids) { list<applicationinfo> applicationinfos = mpackagemanager.getinstalledapplications(packagemanager.get_meta_data); progress progress = new progress(); progress.totalsize = applicationinfos.size(); list<item> itemlist = new arraylist<item>(applicationinfos.size()); monsizefinisheditemcount = 0; (applicationinfo applicationinfo : applicationinfos) { if (iscancelled()) break; item item = new item(); item.applicationinfo = applicationinfo; string label = applicationinfo.loadlabel(mpackagemanager).tostring(); item.label = label; try { item.date = mpackagemanager.getpackageinfo(applicationinfo.packagename, 0).firstinstalltime; } catch (packagemanager.namenotfoundexception e) { item.date = 0l; } itemlist.add(item); getitemsize(item); progress.label = label; publishprogress(progress); } sortapplicationlist(itemlist, msortby); return itemlist; } private void getitemsize(final item item) { try { method getpackagesizeinfo = mpackagemanager.getclass().getmethod( "getpackagesizeinfo", string.class, ipackagestatsobserver.class); getpackagesizeinfo.invoke(mpackagemanager, item.applicationinfo.packagename, new ipackagestatsobserver.stub() { @override public void ongetstatscompleted(final packagestats pstats, boolean succeeded) throws remoteexception { if (succeeded) item.size = pstats.codesize + pstats.cachesize + pstats.datasize + pstats.externalcodesize + pstats.externalcachesize + pstats.externaldatasize + pstats.externalmediasize + pstats.externalobbsize; else item.size = -1l; onitemfinishedsizeprocess(); } }); } catch (nosuchmethodexception e) { e.printstacktrace(); onitemfinishedsizeprocess(); } catch (illegalaccessexception e) { e.printstacktrace(); onitemfinishedsizeprocess(); } catch (invocationtargetexception e) { e.printstacktrace(); onitemfinishedsizeprocess(); } } @override protected void onprogressupdate(progress... values) { super.onprogressupdate(values); progress progress = values[0]; mprogressdialog.setmessage(progress.label); if (mprogressdialog.getmax() == 100) mprogressdialog.setmax(progress.totalsize); mprogressdialog.incrementprogressby(1); } @override protected void onpostexecute(list<item> list) { super.onpostexecute(list); mprogressdialog.hide(); ontaskended(list); } @override protected void oncancelled(list<item> list) { super.oncancelled(list); mprogressdialog.hide(); } } }
in xml have posted,replace tag <fragment> <linearlayout> or <relativelayout> , inside show want display in ui
make sure extend fragment class in fragment activity
Comments
Post a Comment