添加地图到Android TAB - 错误 [英] Adding Map to Android TAB - Error
问题描述
我已经创建了一个应用程序,我有3个选项卡,并在最后一个我添加了一个地图,这里是错误的,因为我得到一个错误的标签导航。
以低于code看看
标签片段:
公共类TAB3扩展片段{ @覆盖
公共查看onCreateView(LayoutInflater吹气,@Nullable的ViewGroup容器,@Nullable捆绑savedInstanceState){
视图V = inflater.inflate(R.layout.tab_3,集装箱,FALSE);
返回伏;
}
}
XML:
<?XML版本=1.0编码=UTF-8&GT?;<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent> <的FrameLayout
机器人:ID =@ + ID / mapFrame
机器人:layout_width =match_parent
机器人:layout_height =match_parent> <片段
机器人:ID =@ + ID /图
机器人:名字=com.google.android.gms.maps.MapFragment
机器人:layout_width =match_parent
机器人:layout_height =match_parent/> < /&的FrameLayout GT;
< / RelativeLayout的>
错误:
E / AndroidRuntime:致命异常:主要
工艺:gon250.dublinbikes,PID:22233
android.view.InflateException:二进制XML文件行#12:错误充气类片段
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:821)
在android.view.LayoutInflater.inflate(LayoutInflater.java:511)
在android.view.LayoutInflater.inflate(LayoutInflater.java:415)
在tabs.Tab3.onCreateView(Tab3.java:32)
在android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
在android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
在android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
在android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
在android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
在android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
在customwidget.SlidingTabLayout $ TabClickListener.onClick(SlidingTabLayout.java:287)
在android.view.View.performClick(View.java:5254)
在android.widget.TextView.performClick(TextView.java:10530)
在android.view.View $ PerformClick.run(View.java:21203)
在android.os.Handler.handleCallback(Handler.java:739)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:145)
在android.app.ActivityThread.main(ActivityThread.java:6872)
在java.lang.reflect.Method.invoke(本机方法)
在java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1404)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
java.lang.IllegalArgumentException异常:二进制XML文件行#12:重复ID 0x7f0d0093,标记为空,或父母身份证0x7f0d0096与com.google.android.gms.maps.MapFragment另一片段所致
在android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2135)
在android.app.Activity.onCreateView(Activity.java:5801)
在android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:34)
在android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:821)
在android.view.LayoutInflater.inflate(LayoutInflater.java:511)
在android.view.LayoutInflater.inflate(LayoutInflater.java:415)
在tabs.Tab3.onCreateView(Tab3.java:32)
在android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
在android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
在android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
在android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
在android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
在android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
在customwidget.SlidingTabLayout $ TabClickListener.onClick(SlidingTabLayout.java:287)
在android.view.View.performClick(View.java:5254)
在android.widget.TextView.performClick(TextView.java:10530)
在android.view.View $ PerformClick.run(View.java:21203)
在android.os.Handler.handleCallback(Handler.java:739)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:145)
在android.app.ActivityThread.main(ActivityThread.java:6872)
在java.lang.reflect.Method.invoke(本机方法)
在java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1404)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
类是在哪里正在添加的错误:
公共类SlidingTabLayout扩展HorizontalScrollView {
/ **
*允许在该选项卡的布局绘制的颜色完全控制。与设置
* {@link #setCustomTabColorizer(TabColorizer)}。
* /
公共接口TabColorizer { / **
返回:返回当选择{@ code位置}用指示剂的颜色。
* /
INT getIndicatorColor(INT位置); } 私有静态最终诠释TITLE_OFFSET_DIPS = 24;
私有静态最终诠释TAB_VIEW_PADDING_DIPS = 16;
私有静态最终诠释TAB_VIEW_TEXT_SIZE_SP = 12; 私人诠释mTitleOffset; 私人诠释mTabViewLayoutId;
私人诠释mTabViewTextViewId;
私人布尔mDistributeEvenly; 私人ViewPager mViewPager;
私人SparseArray<串GT; mContentDescriptions =新SparseArray<串GT;();
私人ViewPager.OnPageChangeListener mViewPagerPageChangeListener; 私人最终SlidingTabStrip mTabStrip; 公共SlidingTabLayout(上下文的背景下){
这(背景下,NULL);
} 公共SlidingTabLayout(上下文的背景下,ATTRS的AttributeSet){
这(背景下,ATTRS,0);
} 公共SlidingTabLayout(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
超(背景下,ATTRS,defStyle); //禁用滚动条
setHorizontalScrollBarEnabled(假);
//确保标签条填补了这一观
setFillViewport(真); mTitleOffset =(int)的(TITLE_OFFSET_DIPS * getResources()getDisplayMetrics()密度。); mTabStrip =新SlidingTabStrip(背景);
addView(mTabStrip,LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
} / **
*设置为使用{@link TabColorizer}自定义。
*
*如果您只需要简单的custmisation那么你可以使用
* {@link #setSelectedIndicatorColors(INT ...)}实现
*同样的效果。
* /
公共无效setCustomTabColorizer(TabColorizer tabColorizer){
mTabStrip.setCustomTabColorizer(tabColorizer);
} 公共无效setDistributeEvenly(布尔distributeEvenly){
mDistributeEvenly = distributeEvenly;
} / **
*设置用于指示所选选项卡的颜色。这些颜色被视为一个
*圆阵。提供了一种颜色将意味着所有标签都用相同的颜色显示。
* /
公共无效setSelectedIndicatorColors(INT ...颜色){
mTabStrip.setSelectedIndicatorColors(颜色);
} / **
*设置{@link ViewPager.OnPageChangeListener}。当使用{@link SlidingTabLayout}你
*必须通过这个方法来设置任何{@link ViewPager.OnPageChangeListener}。这是如此
*该布局可以更新它的正确滚动位置。
*
* @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener)
* /
公共无效setOnPageChangeListener(ViewPager.OnPageChangeListener监听){
mViewPagerPageChangeListener =侦听器;
} / **
*设置为被夸大的标签视图的自定义布局。
*
* @参数layoutResId布局ID被夸大
*而{@link的TextView} @参数textViewId ID在膨胀视图
* /
公共无效setCustomTabView(INT layoutResId,诠释textViewId){
mTabViewLayoutId = layoutResId;
mTabViewTextViewId = textViewId;
} / **
*设置相关的观点寻呼机。需要注意的是这里的假设是,该寻呼机内容
*(选项卡和选项卡标题的数量)这一呼吁作出后不会改变。
* /
公共无效setViewPager(ViewPager viewPager){
mTabStrip.removeAllViews(); mViewPager = viewPager;
如果(viewPager!= NULL){
viewPager.setOnPageChangeListener(新InternalViewPagerListener());
populateTabStrip();
}
} / **
*创建用于选项卡的默认视图。如果自定义选项卡视图不通过设置这就是所谓的
* {@link #setCustomTabView(INT,INT)}。
* /
保护的TextView createDefaultTabView(上下文的背景下){
TextView中的TextView =新的TextView(背景);
textView.setGravity(Gravity.CENTER);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,TAB_VIEW_TEXT_SIZE_SP);
textView.setTypeface(Typeface.DEFAULT_BOLD);
textView.setLayoutParams(新LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); 的TypedValue outValue =新的TypedValue();
的getContext()。getTheme()。resolveAttribute(android.R.attr.selectableItemBackground,
outValue,真正的);
textView.setBackgroundResource(outValue.resourceId);
textView.setAllCaps(真); INT填充=(int)的(TAB_VIEW_PADDING_DIPS * getResources()getDisplayMetrics()密度。);
textView.setPadding(填充,填充,填充,填充); 返回的TextView;
} 私人无效populateTabStrip(){
最终PagerAdapter适配器= mViewPager.getAdapter();
最后View.OnClickListener tabClickListener =新TabClickListener(); 的for(int i = 0; I< adapter.getCount();我++){
查看TabView的= NULL;
TextView的tabTitleView = NULL; 如果(mTabViewLayoutId!= 0){
//如果有一个自定义选项卡视图布局ID设置,尝试它充气
TabView的= LayoutInflater.from(的getContext())。膨胀(mTabViewLayoutId,mTabStrip,
假);
tabTitleView =(TextView中)tabView.findViewById(mTabViewTextViewId);
} 如果(TabView的== NULL){
TabView的= createDefaultTabView(的getContext());
} 如果(tabTitleView == NULL和放大器;&安培; TextView.class.isInstance(TabView的)){
tabTitleView =(TextView中)TabView的;
} 如果(mDistributeEvenly){
LinearLayout.LayoutParams LP =(LinearLayout.LayoutParams)tabView.getLayoutParams();
lp.width = 0;
lp.weight = 1;
} tabTitleView.setText(adapter.getPageTitle(I));
tabView.setOnClickListener(tabClickListener);
desc字符串= mContentDescriptions.get(I,NULL);
如果(DESC!= NULL){
tabView.setContentDescription(DESC);
} mTabStrip.addView(TabView的);
如果(ⅰ== mViewPager.getCurrentItem()){
tabView.setSelected(真);
}
// TODO:解决问题的颜色
tabTitleView.setTextColor(getResources()getColorStateList(R.color.background_material_light));
tabTitleView.setTextSize(14);
}
} 公共无效setContentDescription(INT I,desc字符串){
mContentDescriptions.put(I,DESC);
} @覆盖
保护无效onAttachedToWindow(){
super.onAttachedToWindow(); 如果(mViewPager!= NULL){
scrollToTab(mViewPager.getCurrentItem(),0);
}
} 私人无效scrollToTab(INT的tabIndex,诠释positionOffset){
最终诠释tabStripChildCount = mTabStrip.getChildCount();
如果(tabStripChildCount == 0 ||的tabIndex℃,||的tabIndex> = tabStripChildCount){
返回;
} 查看selectedChild = mTabStrip.getChildAt(的tabIndex);
如果(selectedChild!= NULL){
INT targetScrollX = selectedChild.getLeft()+ positionOffset; 如果(的tabIndex大于0 || positionOffset大于0){
//如果我们在第一个孩子不是和属于中档滚动,确保我们遵守偏移
targetScrollX - = mTitleOffset;
} scrollTo(targetScrollX,0);
}
} 私有类InternalViewPagerListener实现ViewPager.OnPageChangeListener {
私人诠释mScrollState; @覆盖
公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){
INT tabStripChildCount = mTabStrip.getChildCount();
如果((tabStripChildCount == 0)||(位置℃下)||(位置> = tabStripChildCount)){
返回;
} mTabStrip.onViewPagerPageChanged(位置,positionOffset); 查看selectedTitle = mTabStrip.getChildAt(位置);
INT extraOffset =(selectedTitle!= NULL)
? (中间体)(positionOffset * selectedTitle.getWidth())
:0;
scrollToTab(位置,extraOffset); 如果(mViewPagerPageChangeListener!= NULL){
mViewPagerPageChangeListener.onPageScrolled(位置,positionOffset,
positionOffsetPixels);
}
} @覆盖
公共无效onPageScrollStateChanged(INT状态){
mScrollState =状态; 如果(mViewPagerPageChangeListener!= NULL){
mViewPagerPageChangeListener.onPageScrollStateChanged(州);
}
} @覆盖
公共无效使用onPageSelected(INT位置){
如果(mScrollState == ViewPager.SCROLL_STATE_IDLE){
mTabStrip.onViewPagerPageChanged(位置,0F);
scrollToTab(位置,0);
}
的for(int i = 0; I< mTabStrip.getChildCount();我++){
mTabStrip.getChildAt(I).setSelected(位置== I)
}
如果(mViewPagerPageChangeListener!= NULL){
mViewPagerPageChangeListener.onPageSelected(位置);
}
} } 私有类TabClickListener实现View.OnClickListener {
@覆盖
公共无效的onClick(视图v){
的for(int i = 0; I< mTabStrip.getChildCount();我++){
如果(ⅴ== mTabStrip.getChildAt(ⅰ)){
mViewPager.setCurrentItem(ⅰ);
返回;
}
}
}
}}
要更具体的错误是在 mViewPager.setCurrentItem(一)项的功能;
私有类TabClickListener实现View.OnClickListener {
@覆盖
公共无效的onClick(视图v){
的for(int i = 0; I< mTabStrip.getChildCount();我++){
如果(ⅴ== mTabStrip.getChildAt(ⅰ)){
mViewPager.setCurrentItem(ⅰ);
返回;
}
}
}
}
什么是您的logcat抛出
android.view.InflateException:二进制XML文件行#12:错误充气类片段
块引用>我的建议是,使用 SupportMapFragment代替MapFragment
呼叫
类=com.google.android.gms.maps.SupportMapFragment
<片段
机器人:ID =@ + ID /图
类=com.google.android.gms.maps.SupportMapFragment
机器人:layout_width =match_parent
机器人:layout_height =match_parent/>拨打
GoogleMap的地图=((SupportMapFragment)getFragmentManager()。findFragmentById(R.id.map))
.getMap();修改
<片段
机器人:ID =@ + ID /图
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:名字=com.google.android.gms.maps.SupportMapFragment/>拨打
SupportMapFragment mapFragment =((SupportMapFragment)getChildFragmentManager()findFragmentById(R.id.map));
GoogleMap的mapLocation = mapFragment.getMap();I have created an application where I have 3 tabs and in the last one I have added a map, and here is the error because I get an error navigating with the tabs.
Take a look below the code
Tab fragment:
public class Tab3 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.tab_3, container, false); return v; } }
xml:
<?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"> <FrameLayout android:id="@+id/mapFrame" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </RelativeLayout>
Error:
E/AndroidRuntime: FATAL EXCEPTION: main Process: gon250.dublinbikes, PID: 22233 android.view.InflateException: Binary XML file line #12: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:770) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at tabs.Tab3.onCreateView(Tab3.java:32) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) at android.support.v4.view.ViewPager.populate(ViewPager.java:1106) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) at customwidget.SlidingTabLayout$TabClickListener.onClick(SlidingTabLayout.java:287) at android.view.View.performClick(View.java:5254) at android.widget.TextView.performClick(TextView.java:10530) at android.view.View$PerformClick.run(View.java:21203) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6872) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by: java.lang.IllegalArgumentException: Binary XML file line #12: Duplicate id 0x7f0d0093, tag null, or parent id 0x7f0d0096 with another fragment for com.google.android.gms.maps.MapFragment at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2135) at android.app.Activity.onCreateView(Activity.java:5801) at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:34) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:740) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at tabs.Tab3.onCreateView(Tab3.java:32) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) at android.support.v4.view.ViewPager.populate(ViewPager.java:1106) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) at customwidget.SlidingTabLayout$TabClickListener.onClick(SlidingTabLayout.java:287) at android.view.View.performClick(View.java:5254) at android.widget.TextView.performClick(TextView.java:10530) at android.view.View$PerformClick.run(View.java:21203) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6872) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Class where is comming the error:
public class SlidingTabLayout extends HorizontalScrollView { /** * Allows complete control over the colors drawn in the tab layout. Set with * {@link #setCustomTabColorizer(TabColorizer)}. */ public interface TabColorizer { /** * @return return the color of the indicator used when {@code position} is selected. */ int getIndicatorColor(int position); } private static final int TITLE_OFFSET_DIPS = 24; private static final int TAB_VIEW_PADDING_DIPS = 16; private static final int TAB_VIEW_TEXT_SIZE_SP = 12; private int mTitleOffset; private int mTabViewLayoutId; private int mTabViewTextViewId; private boolean mDistributeEvenly; private ViewPager mViewPager; private SparseArray<String> mContentDescriptions = new SparseArray<String>(); private ViewPager.OnPageChangeListener mViewPagerPageChangeListener; private final SlidingTabStrip mTabStrip; public SlidingTabLayout(Context context) { this(context, null); } public SlidingTabLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // Disable the Scroll Bar setHorizontalScrollBarEnabled(false); // Make sure that the Tab Strips fills this View setFillViewport(true); mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density); mTabStrip = new SlidingTabStrip(context); addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } /** * Set the custom {@link TabColorizer} to be used. * * If you only require simple custmisation then you can use * {@link #setSelectedIndicatorColors(int...)} to achieve * similar effects. */ public void setCustomTabColorizer(TabColorizer tabColorizer) { mTabStrip.setCustomTabColorizer(tabColorizer); } public void setDistributeEvenly(boolean distributeEvenly) { mDistributeEvenly = distributeEvenly; } /** * Sets the colors to be used for indicating the selected tab. These colors are treated as a * circular array. Providing one color will mean that all tabs are indicated with the same color. */ public void setSelectedIndicatorColors(int... colors) { mTabStrip.setSelectedIndicatorColors(colors); } /** * Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are * required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so * that the layout can update it's scroll position correctly. * * @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener) */ public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { mViewPagerPageChangeListener = listener; } /** * Set the custom layout to be inflated for the tab views. * * @param layoutResId Layout id to be inflated * @param textViewId id of the {@link TextView} in the inflated view */ public void setCustomTabView(int layoutResId, int textViewId) { mTabViewLayoutId = layoutResId; mTabViewTextViewId = textViewId; } /** * Sets the associated view pager. Note that the assumption here is that the pager content * (number of tabs and tab titles) does not change after this call has been made. */ public void setViewPager(ViewPager viewPager) { mTabStrip.removeAllViews(); mViewPager = viewPager; if (viewPager != null) { viewPager.setOnPageChangeListener(new InternalViewPagerListener()); populateTabStrip(); } } /** * Create a default view to be used for tabs. This is called if a custom tab view is not set via * {@link #setCustomTabView(int, int)}. */ protected TextView createDefaultTabView(Context context) { TextView textView = new TextView(context); textView.setGravity(Gravity.CENTER); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); textView.setTypeface(Typeface.DEFAULT_BOLD); textView.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); TypedValue outValue = new TypedValue(); getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); textView.setBackgroundResource(outValue.resourceId); textView.setAllCaps(true); int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); textView.setPadding(padding, padding, padding, padding); return textView; } private void populateTabStrip() { final PagerAdapter adapter = mViewPager.getAdapter(); final View.OnClickListener tabClickListener = new TabClickListener(); for (int i = 0; i < adapter.getCount(); i++) { View tabView = null; TextView tabTitleView = null; if (mTabViewLayoutId != 0) { // If there is a custom tab view layout id set, try and inflate it tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false); tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); } if (tabView == null) { tabView = createDefaultTabView(getContext()); } if (tabTitleView == null && TextView.class.isInstance(tabView)) { tabTitleView = (TextView) tabView; } if (mDistributeEvenly) { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams(); lp.width = 0; lp.weight = 1; } tabTitleView.setText(adapter.getPageTitle(i)); tabView.setOnClickListener(tabClickListener); String desc = mContentDescriptions.get(i, null); if (desc != null) { tabView.setContentDescription(desc); } mTabStrip.addView(tabView); if (i == mViewPager.getCurrentItem()) { tabView.setSelected(true); } //TODO: fix issue with color tabTitleView.setTextColor(getResources().getColorStateList(R.color.background_material_light)); tabTitleView.setTextSize(14); } } public void setContentDescription(int i, String desc) { mContentDescriptions.put(i, desc); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (mViewPager != null) { scrollToTab(mViewPager.getCurrentItem(), 0); } } private void scrollToTab(int tabIndex, int positionOffset) { final int tabStripChildCount = mTabStrip.getChildCount(); if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { return; } View selectedChild = mTabStrip.getChildAt(tabIndex); if (selectedChild != null) { int targetScrollX = selectedChild.getLeft() + positionOffset; if (tabIndex > 0 || positionOffset > 0) { // If we're not at the first child and are mid-scroll, make sure we obey the offset targetScrollX -= mTitleOffset; } scrollTo(targetScrollX, 0); } } private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { private int mScrollState; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int tabStripChildCount = mTabStrip.getChildCount(); if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { return; } mTabStrip.onViewPagerPageChanged(position, positionOffset); View selectedTitle = mTabStrip.getChildAt(position); int extraOffset = (selectedTitle != null) ? (int) (positionOffset * selectedTitle.getWidth()) : 0; scrollToTab(position, extraOffset); if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels); } } @Override public void onPageScrollStateChanged(int state) { mScrollState = state; if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageScrollStateChanged(state); } } @Override public void onPageSelected(int position) { if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { mTabStrip.onViewPagerPageChanged(position, 0f); scrollToTab(position, 0); } for (int i = 0; i < mTabStrip.getChildCount(); i++) { mTabStrip.getChildAt(i).setSelected(position == i); } if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageSelected(position); } } } private class TabClickListener implements View.OnClickListener { @Override public void onClick(View v) { for (int i = 0; i < mTabStrip.getChildCount(); i++) { if (v == mTabStrip.getChildAt(i)) { mViewPager.setCurrentItem(i); return; } } } } }
To be more concrete the error is in the function below in the
mViewPager.setCurrentItem(i);
private class TabClickListener implements View.OnClickListener { @Override public void onClick(View v) { for (int i = 0; i < mTabStrip.getChildCount(); i++) { if (v == mTabStrip.getChildAt(i)) { mViewPager.setCurrentItem(i); return; } } } }
解决方案Whats your logcat throws
android.view.InflateException: Binary XML file line #12: Error inflating class fragment
My advice , use SupportMapFragment instead of MapFragment .
Call
class="com.google.android.gms.maps.SupportMapFragment"
<fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
Call
GoogleMap map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)) .getMap();
Edit
<fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.google.android.gms.maps.SupportMapFragment"/>
Call
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)); GoogleMap mapLocation = mapFragment.getMap();
这篇关于添加地图到Android TAB - 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!