错误膨胀片段

Tyl*_*aff 1 android android-fragments

我只是想跟随android dev上的示例代码来扩展活动中的片段.我有一个更复杂的项目,我正在工作,但我得到的错误与这里的简单错误相同.谁能指出我正确的方向?

扩展片段的类

package com.example.fragtest;


import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragOne extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.activity_main, container,false);
    }

}
Run Code Online (Sandbox Code Playgroud)

扩展FragmentActivity的类

package com.example.fragtest;

import android.os.Bundle;
import android.view.Menu;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }



}
Run Code Online (Sandbox Code Playgroud)

片段所在的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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" >

   <fragment android:name="com.example.fragtest.FragOne"
       android:id="@+id/frag"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

设置活动名称的清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fragtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

这是logcat输出

07-17 23:45:09.053: E/AndroidRuntime(560): FATAL EXCEPTION: main
07-17 23:45:09.053: E/AndroidRuntime(560): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragtest/com.example.fragtest.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.os.Looper.loop(Looper.java:137)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread.main(ActivityThread.java:4340)
07-17 23:45:09.053: E/AndroidRuntime(560):  at java.lang.reflect.Method.invokeNative(Native Method)
07-17 23:45:09.053: E/AndroidRuntime(560):  at java.lang.reflect.Method.invoke(Method.java:511)
07-17 23:45:09.053: E/AndroidRuntime(560):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-17 23:45:09.053: E/AndroidRuntime(560):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-17 23:45:09.053: E/AndroidRuntime(560):  at dalvik.system.NativeStart.main(Native Method)
07-17 23:45:09.053: E/AndroidRuntime(560): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-17 23:45:09.053: E/AndroidRuntime(560):  at com.example.fragtest.FragOne.onCreateView(FragOne.java:18)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:846)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1160)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-17 23:45:09.053: E/AndroidRuntime(560):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.Activity.setContentView(Activity.java:1835)
07-17 23:45:09.053: E/AndroidRuntime(560):  at com.example.fragtest.MainActivity.onCreate(MainActivity.java:12)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.Activity.performCreate(Activity.java:4465)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
07-17 23:45:09.053: E/AndroidRuntime(560):  ... 11 more
07-17 23:45:09.053: E/AndroidRuntime(560): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f080000, tag null, or parent id 0x0 with another fragment for com.example.fragtest.FragOne
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:277)
07-17 23:45:09.053: E/AndroidRuntime(560):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
07-17 23:45:09.053: E/AndroidRuntime(560):  ... 30 more
Run Code Online (Sandbox Code Playgroud)

use*_*018 7

在您扩展的类中,FragmentActivity您将视图设置为标题为的XML文件activity_main.在activity_main你的内部有你的片段代码的引用,com.example.fragtest.FragOne.加载该XML时,将com.example.fragtest.FragOne执行与之关联的代码.这片段的代码返回一个视图R.id.activity_main.

该XML文件引用了刚刚实例化的相同Fragment代码.你看到了这个难题.

activity_mainFragment类中解决问题实例的新XML文件(未命名的文件).而不是膨胀activity_main膨胀单独的XML(不包含对调用它的代码的引用的XML).有效地activity_main应该是容器,这个新布局(例如fragment_layout)将是UI部分.

我喜欢这样想:尽管有学说,片段有三个部分.容器Activity(这可以,并且在你的情况下,应该通过setContentView来扩展布局XML文件),Fragment的java代码(这可以,在你的情况下,应该扩展布局....除了之外的东西activity_main),而Fragment的相关XML文件(由Fragment类夸大的文件,不包括回溯它的代码的循环引用).

当然,这些咒语有漏洞,但你得到漂移?