2012-07-17 61 views
1

我只是想跟随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); 
    } 

} 

延伸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; 
    } 



} 

的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> 

其中活动名称设置

清单中的类的类
<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> 

这里是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 
+0

“在com.wajumbie.nasadailyimage.NasaDailyImage.onCreate(NasaDailyImage.java:37)” 是什么是NasaDailyImage中的第37行,在你的onCreate()? – Sam 2012-07-17 23:41:09

+0

@ Sam,谢谢,看起来我发布了错误的日志,现在正确的日志已发布 – 2012-07-17 23:44:29

+0

你能发布你如何实例化这个片段吗? – user1449018 2012-07-17 23:50:13

回答

7

在你的类,它扩展FragmentActivity要设置视图标题为activity_main一个XML文件。在activity_main里面你可以参考你的片段代码,com.example.fragtest.FragOne。 加载该XML时,将执行与com.example.fragtest.FragOne关联的代码。那片段的代码返回查看R.id.activity_main

该XML文件引用了相同的片段刚刚实例化它的代码。你看到了难题。

要解决您的问题实例,请在您的片段类中找到一个新的XML文件(其名称不是activity_main)。而不是膨胀activity_main膨胀一个单独的XML(一个不包含对调用它的代码的引用)。有效地activity_main应该是容器,这个新的布局(例如fragment_layout)将成为UI部分。

我喜欢这样想:尽管教条,片段有三个部分。容器活动(这可以,并且在你的情况下应该通过setContentView膨胀一个布局XML文件),片段的java代码(这可以,并且在你的情况下应该膨胀一个布局。而不是activity_main),而片段的关联XML文件(通过您的Fragment类进行膨胀的文件,不包括回到其代码的循环引用)。

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

+0

我明白了,非常感谢!这只是我寻找的那种解释:) – 2012-07-18 02:31:49

+0

简单修复,像魅力一样工作,感谢您花时间帮助我 – 2012-07-18 02:43:33

+0

非常欢迎您。很高兴我能帮上忙! – user1449018 2012-07-18 12:45:02

1

机器人:ID = “@ + ID /断枝”

你logcat中表明您的片段ID是另一个的副本。你有任何其他XML元素具有相同的ID?如果没有,你有没有尝试清理你的项目?

Project->Clean... 
+1

更改为香蕉,仍然有相同的错误 – 2012-07-18 00:27:51

+0

mhmm,是啊我错了。我很抱歉。 – 2012-07-18 06:17:01

1

检查你的片段类,它膨胀的activity_main xml文件是错误的,它应该膨胀你的片段的XML文件。

0

我有同样的问题。在我的XML创建视图,而不是查看

这样变化所需

<view 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:layout_marginTop="20.7dp" 
      android:textColor="@color/silver_two" 
     /> 

<View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:layout_marginTop="20.7dp" 
      android:textColor="@color/silver_two" 
     />