android - 如何在 fragment 中膨胀 LinearLayout?

标签 android android-fragments android-linearlayout android-support-library inflate

我想在“onCreateView”方法中将 LinearLayout 膨胀为 fragment 。但我总是犯同样的错误:

"android.view.InflateException: Binary XML file line #7: Error inflating class fragment"

我在“libs”文件夹中使用android.support.v4.app.FragmentActivity

主要 Activity :

public class GeofranceDeptActivity extends FragmentActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dept);

    }
}

主要 xml 文件 dept:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <fragment class="dauran.geofrance.DeptFragment"
            android:id="@+id/depts" android:layout_weight="1"
            android:layout_width="0px"
            android:layout_height="match_parent"> 
            </fragment>

    <FrameLayout android:id="@+id/detailsdept" android:layout_weight="1"
            android:layout_width="0px"
            android:layout_height="match_parent" />

</LinearLayout>

fragment 的类DeptFragment:

public class DeptFragment extends Fragment implements OnTouchListener{

    Context mContext = getActivity();

    boolean mDualPane;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (container == null) {
              return null;
            }

    return (LinearLayout)inflater.inflate(R.layout.dept_fragment, container, false);
        }


    @Override
    public void onActivityCreated(Bundle savedState) {
        ................etc

我想要膨胀的 xml 文件 dept_fragment :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >
    <ImageView
        android:id="@+id/targetDeptImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/region_france_grand" />

    <ImageView
        android:id="@+id/cacheDeptImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/region_france_grand" />
    <Spinner
        android:id="@+id/sDepartement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/targetImage" />

</RelativeLayout>
</LinearLayout>

Logcat:

06-26 19:02:27.940: E/AndroidRuntime(11993): FATAL EXCEPTION: main
06-26 19:02:27.940: E/AndroidRuntime(11993): java.lang.RuntimeException: Unable to start activity ComponentInfo{dauran.geofrance/dauran.geofrance.GeofranceDeptActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.os.Looper.loop(Looper.java:137)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at java.lang.reflect.Method.invokeNative(Native Method)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at java.lang.reflect.Method.invoke(Method.java:511)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at dalvik.system.NativeStart.main(Native Method)
06-26 19:02:27.940: E/AndroidRuntime(11993): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.Activity.setContentView(Activity.java:1835)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at dauran.geofrance.GeofranceDeptActivity.onCreate(GeofranceDeptActivity.java:10)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.Activity.performCreate(Activity.java:4465)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-26 19:02:27.940: E/AndroidRuntime(11993):    ... 11 more
06-26 19:02:27.940: E/AndroidRuntime(11993): Caused by: java.lang.IllegalStateException: Fragment dauran.geofrance.DeptFragment did not create a view.
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:293)
06-26 19:02:27.940: E/AndroidRuntime(11993):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)

最佳答案

Logcat可能会说更多android.view.InflateException:二进制XML文件行#7:错误膨胀类 fragment (检查下面看看你是否没有实例化异常,也许你可以添加完整的异常?)。查看您的代码后,我假设您的 DeptFragment不位于 dauran.geofrance包,因此 android 找不到它。

此外,无需测试 null container参数:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    return inflater.inflate(R.layout.dept_fragment, container, false);
}

此外,我认为没有必要包装 RelativeLayoutLinearLayoutR.layout.deptfragment :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/targetDeptImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/region_france_grand" />

    <ImageView
        android:id="@+id/cacheDeptImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/region_france_grand" />
    <Spinner
        android:id="@+id/sDepartement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/targetImage" />

</RelativeLayout>

关于android - 如何在 fragment 中膨胀 LinearLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11210922/

相关文章:

java - 当文本溢出而不是换行时,TextView 会拉伸(stretch) CardView

java - Android View 中根据文件数量添加VideoView

java - android java onClick 无法执行 Activity 的方法

java - 传递值

android - 我怎样才能为android制作这个布局?

java - (Android/Java)创建RSA私钥实例

android - 如何从 ViewPager 的 fragment 中更改 Activity 的 View ?

java - RecyclerView 列表不可见

android - 在 LinearLayout 中获取 View 的位置 (Android)

android - TextView "fill_parent"没有填充父级