Friday 15 July 2011

Android studio, XML Inflation error on main activity creation android.view.InflateException -



Android studio, XML Inflation error on main activity creation android.view.InflateException -

hours have gone , still can't round frustrating error. i'm new android programming i'm pretty much next tutorials , trying understand them move along. i've tryed different approaches maintain getting same error.

java.lang.runtimeexception: unable start activity componentinfo{com.testapp.scott.mpt/com.testapp.scott.mpt.myactivity}: android.view.inflateexception: binary xml file line #34: error inflating class fragment

here's fragment layout (i'm using shape background button. that's not problem because i've tryed removing , nil changed...)

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent" tools:context="com.testapp.scott.mpt.maintoolbarfrag" android:background="#ff434343"> <button android:layout_width="96dp" android:layout_height="fill_parent" android:text="my desk" android:id="@+id/bt_toolbar_mydesk" android:background="@drawable/toolbar_buttonbk" android:textsize="18sp" /> <button android:layout_width="96dp" android:layout_height="fill_parent" android:text="exercises" android:id="@+id/bt_toolbar_exercises" android:background="@drawable/toolbar_buttonbk" android:layout_gravity="left" android:textsize="18sp" /> <button android:layout_width="96dp" android:layout_height="fill_parent" android:text="my\nprofile" android:id="@+id/bt_toolbar_myprofile" android:background="@drawable/toolbar_buttonbk" android:layout_gravity="left" android:textsize="18sp" /> <button android:layout_width="96dp" android:layout_height="fill_parent" android:text="extras" android:id="@+id/bt_toolbar_extras" android:background="@drawable/toolbar_buttonbk" android:layout_gravity="left" android:textsize="18sp" /> </linearlayout>

the activity in want fragment displayed:

<gridlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".myactivity" tools:ignore="mergerootframe" > <space android:layout_width="fill_parent" android:layout_height="20dp" android:layout_row="0" android:layout_column="0" android:id="@+id/space0" /> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancemedium" android:text="@string/main_welcome" android:id="@+id/tv_main_welcome" android:layout_row="1" android:layout_column="0" android:textalignment="center" android:singleline="true" android:password="false" android:inputtype="none" android:gravity="center" android:textstyle="italic" android:layout_gravity="left|top" /> <fragment android:layout_width="wrap_content" android:layout_height="74dp" class="com.testapp.scott.mpt.maintoolbarfrag" android:id="@+id/fragment" android:layout_row="30" android:layout_column="0" tools:layout="@layout/fragment_maintoolbar" />

my fragment java class:

package com.testapp.scott.mpt; import android.app.activity; import android.net.uri; import android.os.bundle; import android.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; /** * simple {@link fragment} subclass. * activities contain fragment must implement * {@link maintoolbarfrag.onfragmentinteractionlistener} interface * handle interaction events. * utilize {@link maintoolbarfrag#newinstance} mill method * create instance of fragment. * */ public class maintoolbarfrag extends fragment { // todo: rename parameter arguments, take names match // fragment initialization parameters, e.g. arg_item_number private static final string arg_param1 = "param1"; private static final string arg_param2 = "param2"; // todo: rename , alter types of parameters private string mparam1; private string mparam2; private onfragmentinteractionlistener mlistener; /** * utilize mill method create new instance of * fragment using provided parameters. * * @param param1 parameter 1. * @param param2 parameter 2. * @return new instance of fragment maintoolbarfrag. */ // todo: rename , alter types , number of parameters public static maintoolbarfrag newinstance(string param1, string param2) { maintoolbarfrag fragment = new maintoolbarfrag(); bundle args = new bundle(); args.putstring(arg_param1, param1); args.putstring(arg_param2, param2); fragment.setarguments(args); homecoming fragment; } public maintoolbarfrag() { // required empty public constructor } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); if (getarguments() != null) { mparam1 = getarguments().getstring(arg_param1); mparam2 = getarguments().getstring(arg_param2); } } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment homecoming inflater.inflate(r.layout.fragment_maintoolbar, container, false); } // todo: rename method, update argument , hook method ui event public void onbuttonpressed(uri uri) { if (mlistener != null) { mlistener.onfragmentinteraction(uri); } } @override public void onattach(activity activity) { super.onattach(activity); seek { mlistener = (onfragmentinteractionlistener) activity; } grab (classcastexception e) { throw new classcastexception(activity.tostring() + " must implement onfragmentinteractionlistener"); } } @override public void ondetach() { super.ondetach(); mlistener = null; } /** * interface must implemented activities contain * fragment allow interaction in fragment communicated * activity , potentially other fragments contained in * activity. * <p> * see android training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >communicating other fragments</a> more information. */ public interface onfragmentinteractionlistener { // todo: update argument type , name public void onfragmentinteraction(uri uri); } }

and main activity class:

package com.testapp.scott.mpt; import android.app.activity; import android.app.fragment; import android.content.intent; import android.os.bundle; import android.view.layoutinflater; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import com.testapp.scott.mpt.myclasses.constants; import com.testapp.scott.mpt.myclasses.exercises; import com.testapp.scott.mpt.myclasses.userdata; import com.testapp.scott.mpt.myclasses.deskdata; import org.xmlpull.v1.xmlpullparser; import org.xmlpull.v1.xmlpullparserexception; import org.xmlpull.v1.xmlpullparserfactory; import java.io.ioexception; import java.io.inputstream; import java.text.parseexception; public class myactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_my); if (savedinstancestate == null) { getfragmentmanager().begintransaction() .add(r.id.container, new placeholderfragment()) .commit(); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.my, menu); homecoming true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); if (id == r.id.action_settings) { homecoming true; } homecoming super.onoptionsitemselected(item); } /** * placeholder fragment containing simple view. */ public static class placeholderfragment extends fragment { public placeholderfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.activity_my, container, false); homecoming rootview; } } }

and log:

10-13 20:51:54.974 1678-1678/com.testapp.scott.mpt d/dalvikvm﹕ late-enabling checkjni 10-13 20:51:54.994 1678-1684/com.testapp.scott.mpt d/dalvikvm﹕ debugger has detached; object registry had 1 entries 10-13 20:51:55.074 1678-1678/com.testapp.scott.mpt d/androidruntime﹕ shutting downwards vm 10-13 20:51:55.074 1678-1678/com.testapp.scott.mpt w/dalvikvm﹕ threadid=1: thread exiting uncaught exception (group=0x41941d88) 10-13 20:51:55.074 1678-1678/com.testapp.scott.mpt e/androidruntime﹕ fatal exception: main process: com.testapp.scott.mpt, pid: 1678 java.lang.runtimeexception: unable start activity componentinfo{com.testapp.scott.mpt/com.testapp.scott.mpt.myactivity}: android.view.inflateexception: binary xml file line #34: error inflating class fragment @ android.app.activitythread.performlaunchactivity(activitythread.java:2237) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2286) @ android.app.activitythread.access$800(activitythread.java:144) @ android.app.activitythread$h.handlemessage(activitythread.java:1246) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:212) @ android.app.activitythread.main(activitythread.java:5135) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:877) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:693) @ dalvik.system.nativestart.main(native method) caused by: android.view.inflateexception: binary xml file line #34: error inflating class fragment @ android.view.layoutinflater.createviewfromtag(layoutinflater.java:713) @ android.view.layoutinflater.rinflate(layoutinflater.java:755) @ android.view.layoutinflater.inflate(layoutinflater.java:492) @ android.view.layoutinflater.inflate(layoutinflater.java:397) @ android.view.layoutinflater.inflate(layoutinflater.java:353) @ com.android.internal.policy.impl.phonewindow.setcontentview(phonewindow.java:297) @ android.app.activity.setcontentview(activity.java:1929) @ com.testapp.scott.mpt.myactivity.oncreate(myactivity.java:32) @ android.app.activity.performcreate(activity.java:5231) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) @ android.app.activitythread.performlaunchactivity(activitythread.java:2201) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2286) @ android.app.activitythread.access$800(activitythread.java:144) @ android.app.activitythread$h.handlemessage(activitythread.java:1246) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:212) @ android.app.activitythread.main(activitythread.java:5135) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:877) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:693) @ dalvik.system.nativestart.main(native method) caused by: java.lang.classcastexception: com.testapp.scott.mpt.myactivity@44aea5d0 must implement onfragmentinteractionlistener @ com.testapp.scott.mpt.maintoolbarfrag.onattach(maintoolbarfrag.java:84) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:853) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1044) @ android.app.fragmentmanagerimpl.addfragment(fragmentmanager.java:1146) @ android.app.activity.oncreateview(activity.java:4786) @ android.view.layoutinflater.createviewfromtag(layoutinflater.java:689) @ android.view.layoutinflater.rinflate(layoutinflater.java:755) @ android.view.layoutinflater.inflate(layoutinflater.java:492) @ android.view.layoutinflater.inflate(layoutinflater.java:397) @ android.view.layoutinflater.inflate(layoutinflater.java:353) @ com.android.internal.policy.impl.phonewindow.setcontentview(phonewindow.java:297) @ android.app.activity.setcontentview(activity.java:1929) @ com.testapp.scott.mpt.myactivity.oncreate(myactivity.java:32) @ android.app.activity.performcreate(activity.java:5231) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) @ android.app.activitythread.performlaunchactivity(activitythread.java:2201) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2286) @ android.app.activitythread.access$800(activitythread.java:144) @ android.app.activitythread$h.handlemessage(activitythread.java:1246) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:212) @ android.app.activitythread.main(activitythread.java:5135) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:877) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:693) @ dalvik.system.nativestart.main(native method)

i've fixed missing implementation in activity class. real problem here inflation error. thanks!

your problem these lines of code:

@override public void onattach(activity activity) { super.onattach(activity); seek { mlistener = (onfragmentinteractionlistener) activity; } grab (classcastexception e) { throw new classcastexception(activity.tostring() + " must implement onfragmentinteractionlistener"); } }

your activity must implement onfragmentinteractionlistener, not implement in myactivity.

android xml android-fragments android-fragmentactivity

No comments:

Post a Comment