第二次错误地膨胀类片段

时间:2014-10-28 17:07:31

标签: android android-fragments

我是Android应用开发的新手

我有以下代码

@SuppressLint("NewApi") public class HomeActivity extends ActionBarActivity 
{
    static FragmentManager fragmentManager;

稍后我有以下

fragment = homeFragment;
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

主页片段具有以下内容

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="0dp" 
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    android:paddingBottom="0dp"
    android:layout_marginLeft="0dp" 
    android:layout_marginRight="0dp"
    android:layout_marginTop="0dp"
    android:layout_marginBottom="0dp"               
    android:gravity="top"   
    android:background="#D3D3D3" >

    <ViewFlipper
        android:id="@+id/view_flipper"
        android:layout_width="match_parent" 
        android:layout_height="128dp"       
        android:paddingLeft="0dp" 
        android:paddingRight="0dp"
        android:paddingTop="0dp"
        android:paddingBottom="0dp" 
        android:layout_marginLeft="0dp" 
        android:layout_marginRight="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"           
        android:gravity="top"
        android:background="#000000"
        android:inAnimation="@anim/slide_in_right"
        android:outAnimation="@anim/slide_out_left">
    </ViewFlipper>

    <TextView
        android:id="@+id/city_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"         
        android:layout_marginTop="98dp"
        android:textColor="#FFFFFF"
        android:background="#000000"
        android:textSize="16sp"
        android:text=""
        android:gravity="center" />

     <!-- ***** THIS IS WHAT IS CAUSING THE PROBLEM ***** -->             
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/the_map"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="129dp"
        class="com.google.android.gms.maps.MapFragment" />

    <TextView
        android:id="@+id/message1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="0dp"
        android:gravity="center" 
        android:textColor="@color/red"
        android:text="" />

</RelativeLayout>

HomeFragment第一次完美运作

我第二次得到&#34;错误膨胀类片段&#34;

我看过许多不同的事情,但没有什么适用于我的情况

非常感谢任何帮助

logcat的

10-28 12:49:10.712:E / AndroidRuntime(3701):致命异常:主要 10-28 12:49:10.712:E / AndroidRuntime(3701):进程:com.tobesafe.tobesafe,PID:3701 10-28 12:49:10.712:E / AndroidRuntime(3701):android.view.InflateException:二进制XML文件行#48:错误膨胀类片段 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:714) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.view.LayoutInflater.inflate(LayoutInflater.java:492) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.view.LayoutInflater.inflate(LayoutInflater.java:397) 10-28 12:49:10.712:E / AndroidRuntime(3701):at com.tobesafe.tobesafe.HomeFragment.onCreateView(HomeFragment.java:80) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.Fragment.performCreateView(Fragment.java:1700) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.BackStackRecord.run(BackStackRecord.java:684) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.FragmentManagerImpl $ 1.run(FragmentManager.java:443) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.os.Handler.handleCallback(Handler.java:733) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.os.Handler.dispatchMessage(Handler.java:95) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.os.Looper.loop(Looper.java:136) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.ActivityThread.main(ActivityThread.java:5017) 10-28 12:49:10.712:E / AndroidRuntime(3701):at java.lang.reflect.Method.invokeNative(Native Method) 10-28 12:49:10.712:E / AndroidRuntime(3701):at java.lang.reflect.Method.invoke(Method.java:515) 10-28 12:49:10.712:E / AndroidRuntime(3701):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 10-28 12:49:10.712:E / AndroidRuntime(3701):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 10-28 12:49:10.712:E / AndroidRuntime(3701):at dalvik.system.NativeStart.main(Native Method) 10-28 12:49:10.712:E / AndroidRuntime(3701):引起:java.lang.IllegalArgumentException:二进制XML文件行#48:复制id 0x7f08005f,标记为null或父ID为0xffffffff,其中包含com.google的另一个片段.android.gms.maps.MapFragment 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.app.Activity.onCreateView(Activity.java:4791) 10-28 12:49:10.712:E / AndroidRuntime(3701):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:690) 10-28 12:49:10.712:E / AndroidRuntime(3701):... 19更多

2 个答案:

答案 0 :(得分:0)

HomeFragment或HomeActivity中的布局是否夸大了?如果在一个问题片段中膨胀。您不能在片段内的布局中膨胀片段,您必须手动执行此操作。以下是它的参考:Nested Fragments

以下是如何操作的示例:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.fragment_layout, container, false);
        FragmentManager fm = getChildFragmentManager();
        SupportMapFragment supportMapfragment = (SupportMapFragment) fm.findFragmentByTag(FRAG_TAG_MAPFRAGMENT);
        if (supportMapfragment == null) {
            supportMapfragment = SupportMapFragment.newInstance();
            fm.beginTransaction().add(R.id.frame_fragment, supportMapfragment).commit();
        }
        return v;
    }

请务必使用getChildFragmentManager()代替普通getFragmentManager()

答案 1 :(得分:0)

首先, 我认为在其中添加一个片段与另一个片段是不合逻辑的。 其次我不明白为什么你们这样:

FragmentManager fragMan;
fragMan.beginTransaction().replace(blah blah blah. . . );

我认为这不是一个好习惯。我相信使用FragmentTransaction对象做这一切会更好:

FragmentTransaction ft;
ft = (FragmentTransaction) getSupportFragmentManager().beginTransaction(blah blah blah. . . . );
ft.commit();

也许你们知道我不知道的事情。 问候。