No tab content FrameLayout found for id xxxxxxx

 

android 4.4 自己加上的 

android-support-v4.jar 使用以下布局会报

No tab content FrameLayout found for id xxxxxxx

我老版本的 android-support-v4.jar  差距很大

 

 

用FragmentTabHost + FragmentActivity 实现了微博的底部Tab,layout布局如下:

 

[html]  view plain copy 在CODE上查看代码片
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <FrameLayout  
  8.         android:id="@+id/realtabcontent"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="0dp"  
  11.         android:layout_weight="1" />  
  12.   
  13.     <android.support.v4.app.FragmentTabHost  
  14.         android:id="@android:id/tabhost"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content" >  
  17.   
  18.         <TabWidget  
  19.             android:id="@android:id/tabs"  
  20.             android:layout_width="match_parent"  
  21.             android:layout_height="wrap_content"  
  22.             android:layout_alignParentBottom="true" />  
  23.   
  24.         <FrameLayout  
  25.             android:id="@android:id/tabcontent"  
  26.             android:layout_width="match_parent"  
  27.             android:layout_height="wrap_content" />  
  28.     </android.support.v4.app.FragmentTabHost>  
  29.   
  30. </LinearLayout>  


Activity如下:

 

 

[java]  view plain copy 在CODE上查看代码片
 
  1. package com.yuzile.yuzile;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.yuzile.yuzile.util.YuziLog;  
  6.   
  7. import android.graphics.drawable.Drawable;  
  8. import android.os.Bundle;  
  9. import android.support.v4.app.FragmentActivity;  
  10. import android.support.v4.app.FragmentTabHost;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.ImageView;  
  15. import android.widget.TextView;  
  16. import android.widget.TabHost.TabSpec;  
  17.   
  18. public class MainActivity extends FragmentActivity {  
  19.   
  20.     private FragmentTabHost mTabHost;  
  21.   
  22.     private final static String[] tags = { "intro""guide""artworks",  
  23.             "discovery" };  
  24.     private final static Class[] tagClasses = { IntroFragment.class,  
  25.             GuideFragment.class, ArtworksFragment.class,  
  26.             DiscoveryFragment.class };  
  27.     private final static String[] tagIndicators = { "简介""导览""作品""发现" };  
  28.     private final static int[] tagImages = {  
  29.             R.drawable.tab_bar_intro_bg_selector,  
  30.             R.drawable.tab_bar_guide_bg_selector,  
  31.             R.drawable.tab_bar_artworks_bg_selector,  
  32.             R.drawable.tab_bar_discovery_bg_selector };  
  33.   
  34.     @Override  
  35.     protected void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.main_activity);  
  38.   
  39.         mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);  
  40.   
  41.         initTabHost();  
  42.     }  
  43.   
  44.     private void initTabHost() {  
  45.         mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);  
  46.         findViewById(android.R.id.tabs).setBackgroundResource(  
  47.                 R.drawable.bottombarbg);  
  48.         for (int i = 0; i < tags.length; i++) {  
  49.             TabSpec tabSpec = mTabHost.newTabSpec(tags[i]);  
  50.             Drawable drawable = getResources().getDrawable(  
  51.                     R.drawable.tab_bar_intro_bg_selector);  
  52.             tabSpec.setIndicator(getIndicatorView(i));  
  53.             mTabHost.addTab(tabSpec, tagClasses[i], null);  
  54.         }  
  55.     }  
  56.   
  57.     private View getIndicatorView(int i) {  
  58.         LayoutInflater inflater = getLayoutInflater();  
  59.         ViewGroup views = (ViewGroup) inflater.inflate(  
  60.                 R.layout.tab_widget_item, null);  
  61.         ImageView imageView = (ImageView) views  
  62.                 .findViewById(R.id.tab_widget_item_image);  
  63.         TextView textView = (TextView) views  
  64.                 .findViewById(R.id.tab_widget_item_text);  
  65.         imageView.setBackgroundResource(tagImages[i]);  
  66.         textView.setText(tagIndicators[i]);  
  67.         return views;  
  68.     }  
  69.   
  70. }  



 

刚开始一直进行得非常顺利,但是就在今天,我导入了一个Google Map的Library,地图都进行的很顺利,但是在编译的时候提示

 

Found2 versions of android-support-v4.jar in the dependency list,

就是有两个版本的android-support-v4.jar , 我一看是因为Google Map的Library也有一个,两个估计是不一样引起提示,强迫症患者就讨厌就是看到提示了,所以我想用其中一个替换另一个,但是以哪个为准呢?既然Google Map是官方的库,肯定没问题,所以用Google Map Library的android-support-v4.jar替换了我当前的项目的了.好了,麻烦就来了:启动App就会崩掉,并且报错:No tab content FrameLayout found for id xxxxxxx . 原来工作得挺好的,后来就崩了,所以我肯定代码是没问题的.

 

网上有答案说要自定义FragmentTabHost http://stackoverflow.com/questions/13408709/android-tabs-at-the-bottom-with-fragmenttabhost , 但是我并不像这么做,也没尝试,纠结很久之后,知道是android-support-v4.jar某些版本的Bug引起的,但是我不知道是什么版本,什么版本修好了,官方也没有说明,所以一个思路是找到正确的那个版本,在自己的开发环境新建了一个工程,按照原来的工程配置,但还是一样的错误,我也不知道为什么,也许来大姨妈了. 最后在网上找了一些实例代码下载,先正确运行了,然后偷里面的android-support-v4.jar 替换到项目中,果然可以了,罪魁祸首就是Google Map的android-support-v4.jar ,害得我浪费了一天啊.

 

后来又崩了,不断提示:

 Found 2 versions of android-support-v4.jar in the dependency list,

but not all the versions are identical (check is based on SHA-1 only at this time).

All versions of the libraries must be the same at this time.

就是这个错误导致了启动的时候找不到Activity,所以必须解决两个不同版本的android-support-v4.jar冲突的问题,解决方法当然是覆盖了...

 

参考网址:http://code.google.com/p/android/issues/detail?id=53230

你可能感兴趣的:(FrameLayout)