Binary XML file line #13: Duplicate id 0x7f070055, tag null, or parent id 0x7f070054 with another fr
2014-11-05 23:53
686 查看
要实现如图所示效果。
遇到如下问题:
进入后首先默认选择ActionBar上的顾客管理Tab,点击店员管理Tab后正常显示(内容和顾客管理样式一样),再点击顾客管理Tab报错退出。
现在知道原因是由于顾客管理Tab的ListFragment有关。是因为虽然删除了顾客管理Tab的Fragment但是,Fragment还有一个子ListFragment没有被删除,第二次加载因为重复报错。
文件结构如下
MainActivity
CustomerFragment ClerkFragment
ListFragment ListFragment
报错如下
代码如下
MainActivity.java
MainActivity.xml
CustomerMainFragment.java
customer_main_customer.xml
CustomerTitleFragment.java
clerk和Customer一样,只是内容不同
===================================================
我要用下面的代码来加载的片段的项已被选定在 NavigationDrawer,然而 MapFragment 包含它里面的谷歌地图片段和它崩溃后试图打开它第二次。
这里是我使用的代码:
在这里是的日志:
仅以 MapFragment 发生这种情况。PlaceholderFragment 只是正常。
更新
fragment_map.xml
重复的 ID 问题被有关使用嵌套的片段不正确方式。
来自: http://developer.android.com/about/versions/android-4.2.html#NestedFragments
注:你不能膨胀布局到一个片段当该布局包含
所以您
请注意,使用
路漫漫其修远兮 吾将上下而求索
遇到如下问题:
进入后首先默认选择ActionBar上的顾客管理Tab,点击店员管理Tab后正常显示(内容和顾客管理样式一样),再点击顾客管理Tab报错退出。
现在知道原因是由于顾客管理Tab的ListFragment有关。是因为虽然删除了顾客管理Tab的Fragment但是,Fragment还有一个子ListFragment没有被删除,第二次加载因为重复报错。
文件结构如下
MainActivity
CustomerFragment ClerkFragment
ListFragment ListFragment
报错如下
06-27 23:09:33.443: E/AndroidRuntime(14181): FATAL EXCEPTION: main 06-27 23:09:33.443: E/AndroidRuntime(14181): android.view.InflateException: Binary XML file line #6: Error inflating class fragment 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 06-27 23:09:33.443: E/AndroidRuntime(14181): at store.mgr.root.customer.CustomerMainFragment.onCreateView(CustomerMainFragment.java:25) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.BackStackRecord.run(BackStackRecord.java:639) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.os.Handler.handleCallback(Handler.java:615) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.os.Handler.dispatchMessage(Handler.java:92) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.os.Looper.loop(Looper.java:137) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.ActivityThread.main(ActivityThread.java:4823) 06-27 23:09:33.443: E/AndroidRuntime(14181): at java.lang.reflect.Method.invokeNative(Native Method) 06-27 23:09:33.443: E/AndroidRuntime(14181): at java.lang.reflect.Method.invoke(Method.java:511) 06-27 23:09:33.443: E/AndroidRuntime(14181): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 06-27 23:09:33.443: E/AndroidRuntime(14181): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 06-27 23:09:33.443: E/AndroidRuntime(14181): at dalvik.system.NativeStart.main(Native Method) 06-27 23:09:33.443: E/AndroidRuntime(14181): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f0a000a, tag null, or parent id 0xffffffff with another fragment for store.mgr.root.customer.CustomerTitlesFragment 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.app.Activity.onCreateView(Activity.java:4669) 06-27 23:09:33.443: E/AndroidRuntime(14181): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 06-27 23:09:33.443: E/AndroidRuntime(14181): ... 19 more 06-27 23:09:34.734: I/Process(14181): Sending signal. PID: 14181 SIG: 9
代码如下
MainActivity.java
package store.mgr.root; import store.mgr.root.R; import store.mgr.root.R.layout; import store.mgr.root.R.menu; import store.mgr.root.R.string; import store.mgr.root.clerk.ClerkMainFragment; import store.mgr.root.customer.CustomerMainFragment; import store.mgr.root.customer.CustomerTitlesFragment; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.Dialog; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Context; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.Window; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.ToggleButton; /** * This demonstrates how you can implement switching between the tabs of a * TabHost through fragments, using FragmentTabHost. */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // setup Action Bar for tabs final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // remove the activity title to make space for tabs actionBar.setDisplayShowTitleEnabled(false); // instantiate fragment for the tab actionBar.addTab(actionBar.newTab().setText(R.string.customer_mgr) .setTabListener(new StoreTabListener(new CustomerMainFragment()))); actionBar.addTab(actionBar.newTab().setText(R.string.clerk_mgr) .setTabListener(new StoreTabListener(new ClerkMainFragment()))); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); return true; } private class StoreTabListener implements ActionBar.TabListener{ private Fragment fragment; public StoreTabListener(Fragment fragment) { super(); this.fragment = fragment; // TODO Auto-generated constructor stub } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub ft.add(R.id.customer_clerk, fragment); //ft.commit(); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub ft.remove(fragment); //ft.commit(); } } }
MainActivity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:baselineAligned="false" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/customer_clerk" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailsElementBackground" /> </LinearLayout>
CustomerMainFragment.java
package store.mgr.root.customer; import store.mgr.root.R; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.LinearLayout.LayoutParams; /** * This demonstrates how you can implement switching between the tabs of a * TabHost through fragments, using FragmentTabHost. */ public class CustomerMainFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.activity_main_customer, null); return layout; } }
customer_main_customer.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:baselineAligned="false" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="store.mgr.root.customer.CustomerTitlesFragment" android:id="@+id/customer_titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/customer_details" android:layout_weight="1" android:layout_width="800dp" android:layout_height="match_parent" android:background="?android:attr/detailsElementBackground" /> </LinearLayout>
CustomerTitleFragment.java
package store.mgr.root.customer; import android.app.ListFragment; import android.os.Bundle; import android.widget.ArrayAdapter; public class CustomerTitlesFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); String titles[] = new String[]{"dogs","cats","horses"}; setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, titles)); } }
clerk和Customer一样,只是内容不同
===================================================
我要用下面的代码来加载的片段的项已被选定在 NavigationDrawer,然而 MapFragment 包含它里面的谷歌地图片段和它崩溃后试图打开它第二次。
这里是我使用的代码:
@Override public void onNavigationDrawerItemSelected(int position) { // update the main content by replacing fragments FragmentManager fragmentManager = getSupportFragmentManager(); if (position == 0) { fragmentManager.beginTransaction() .replace(R.id.container, MapFragment.newInstance("a", "b")) .commit(); } else { fragmentManager.beginTransaction() .replace(R.id.container, PlaceholderFragment.newInstance(position + 1)) .commit(); } }
在这里是的日志:
03-01 14:18:25.870 27175-27175/com.br.appname E/﹕ Device driver API match Device driver API version: 23 User space API version: 23 03-01 14:18:25.870 27175-27175/com.br.appname E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct 30 09:36:10 KST 2013 03-01 14:19:12.655 27175-27175/com.br.appname E/AndroidRuntime﹕ FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #13: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at com.br.appname.fragments.MapFragment.onCreateView(MapFragment.java:74) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f070055, tag null, or parent id 0x7f070054 with another fragment for com.google.android.gms.maps.MapFragment at android.app.Activity.onCreateView(Activity.java:4971) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at com.br.appname.fragments.MapFragment.onCreateView(MapFragment.java:74) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5419) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method)
仅以 MapFragment 发生这种情况。PlaceholderFragment 只是正常。
更新
fragment_map.xml
<RelativeLayout 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" tools:context="com.br.remotepark.fragments.MapFragment"> <com.sothree.slidinguppanel.SlidingUpPanelLayout android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.google.android.gms.maps.MapFragment" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#eee" android:orientation="vertical" android:clickable="true" android:focusable="false"> <LinearLayout android:layout_width="match_parent" android:layout_height="68dp" android:orientation="horizontal"> <TextView android:id="@+id/name" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:textSize="14sp" android:gravity="center_vertical" android:paddingLeft="10dp" /> <Button android:id="@+id/follow" android:layout_width="wrap_content" android:layout_height="match_parent" android:textSize="14sp" android:gravity="center_vertical|right" android:paddingRight="10dp" android:paddingLeft="10dp" /> </LinearLayout> </LinearLayout> </com.sothree.slidinguppanel.SlidingUpPanelLayout> </RelativeLayout>
解决方法 1:
重复的 ID 问题被有关使用嵌套的片段不正确方式。来自: http://developer.android.com/about/versions/android-4.2.html#NestedFragments
注:你不能膨胀布局到一个片段当该布局包含
<fragment>。动态地添加到一个片段时只支持嵌套的片段。
所以您
fragment_map.xml不能直接包含
com.google.android.gms.maps.MapFragment。替换它的
FrameLayoutid 为
map_container和尝试像这样:
public class MyFragmentWithMap extends Fragment { private MapFragment fragment; private GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_map, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); FragmentManager fm = getChildFragmentManager(); fragment = (MapFragment) fm.findFragmentById(R.id.map_container); if (fragment == null) { fragment = MapFragment.newInstance(); fm.beginTransaction().replace(R.id.map_container, fragment).commit(); } } @Override public void onResume() { super.onResume(); setUpMapIfNeeded(); } // ... }
请注意,使用
getChildFragmentManager。
路漫漫其修远兮 吾将上下而求索
相关文章推荐
- Duplicate id xxx, tag null, or parent id xxx with another fragment for xxxFragment
- Duplicate id, tag null, or parent id 0x0 with another fragment 解决方案
- Duplicate id, tag null, or parent id 0x0 with another fragment 解决方案
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
- Binary XML file line #4: <item> tag requires a 'drawable' attribute or child tag defining a drawable
- Exception:Duplicate id 0x7f0b00d6, tag null, or parent id 0xffffffff with another fragment
- Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable
- android编程中遇到的Caused by: android.view.InflateException: Binary XML file line #13错误的原因及解决办法
- android.view.InflateException: Binary XML file line #异常的解决
- Binary XML file line #%: Error inflating class com.package.xx.View
- Android运行时异常“Binary XML file line # : Error inflating class”
- Caused by: android.view.InflateException: Binary XML file line
- 【layout】Binary XML file line #23: You must supply a layout_width attribute.
- Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
- Android运行时异常“Binary XML file line # : Error inflating class”
- Android运行时异常“Binary XML file line # : Error inflating class”
- 解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
- android.view.InflateException: Binary XML file line #异常的解决
- Android运行时异常“Binary XML file line # : Error inflating class”
- Writing binary data to a socket (or file) with Python - Stack Overflow