问题
i have been debugging for days, not sure what is causing the issue. here is my basic setup 1. using android 4.1 sdk 2. want to use fragment, but also need to support older devices, so i am using android.support.v4.*
here is my only activity
MyActivity.java
package com.example;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MyActivity extends FragmentActivity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
my main.xml layout file inflated by MyActivity.java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, MyActivity"
/>
<fragment name="com.example.BreadListFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
notice the fragment tag? a lot of example uses fragment class=.... i could not use that because i am using the android.support.v4.app.Fragment, it will give me an error saying cannot covert that particular fragment to android.app.fragment (which is from api level 11)
com.example.BreadListFragment.java has the following code
package com.example;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class BreadListFragment extends ListFragment {
int currentSelectedBreadPos = 0;
@Override
public void onAttach(Activity myActivity) {
super.onAttach(myActivity);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
currentSelectedBreadPos = savedInstanceState.getInt("curBreadPos", 0);
}
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, new String[] {"Banana", "Apple", "Watermelon"}));
ListView lv = getListView();
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lv.setSelection(currentSelectedBreadPos);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curBreadPos", currentSelectedBreadPos);
}
@Override
public void onDetach() {
super.onDetach();
}
}
with the above code, i tried to run, the app crashes, with the following full stack tract but here is what is crashing
10-26 13:01:36.972: INFO/ActivityManager(1903): Start proc com.example for activity com.example/.MyActivity: pid=2036 uid=10058 gids={1015, 1023}
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MyActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
at com.example.MyActivity.onCreate(MyActivity.java:13)
full stack trace
10-26 12:59:14.847: INFO/ActivityManager(1903): Process com.example (pid 1351) has died.
10-26 13:01:34.787: INFO/ApplicationPolicy(1903): isApplicationInstallationEnabled : pkg com.example
10-26 13:01:34.797: INFO/PackageParser(1903): com.example: compat added android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_PHONE_STATE
10-26 13:01:34.842: INFO/PackageManager(1903): Removing non-system package:com.example
10-26 13:01:34.842: INFO/ActivityManager(1903): Force stopping package com.example uid=10058
10-26 13:01:34.932: INFO/PackageManager(1903): ICS_DEBUG scanPackageLI entered com.example
10-26 13:01:34.932: INFO/PackageManager(1903): ICS_DEBUG checking for com.example
10-26 13:01:34.932: INFO/PackageManager(1903): Running dexopt on: com.example
10-26 13:01:35.187: INFO/ActivityManager(1903): Force stopping package com.example uid=10058
10-26 13:01:35.327: DEBUG/PackageManager(1903): New package installed in /data/app/com.example-2.apk
10-26 13:01:35.567: INFO/ActivityManager(1903): Force stopping package com.example uid=10058
10-26 13:01:35.642: DEBUG/Launcher.LauncherModel(2152): --> package:com.example
10-26 13:01:35.662: DEBUG/Launcher.LauncherModel(2152): --> update package com.example
10-26 13:01:35.662: DEBUG/Launcher.LauncherModel(2152): --> package:com.example
10-26 13:01:35.692: INFO/SocialHub(28751): [UinboxReceiver] onReceive() >> intent.getData() : com.example
10-26 13:01:36.897: INFO/ActivityManager(1903): START {flg=0x10000000 cmp=com.example/.MyActivity} from pid 2015
10-26 13:01:36.972: INFO/ActivityManager(1903): Start proc com.example for activity com.example/.MyActivity: pid=2036 uid=10058 gids={1015, 1023}
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MyActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
at com.example.MyActivity.onCreate(MyActivity.java:13)
can someone eplease help? and kind enough to run it with code above. or let me know what i am doing wrong?
回答1:
You should be using android:name
in your fragment
tag.
Change this line...
<fragment name="com.example.BreadListFragment"
... to this...
<fragment android:name="com.example.BreadListFragment"
回答2:
Probably you have incorrectly spelled your fragment class name in your xml layout file. Or there is an error in your xml fragment file. Anyway double check your xmls.
来源:https://stackoverflow.com/questions/13093677/android-fragment-android-support-v4-app-fragment-crashing-the-app