2015-07-20 68 views
0

在我的Android项目中,我已经创建了导航抽屉作为基类。 其他活动扩展了该基类。即使它工作正常。 但是现在我想在我的一个活动中使用选项卡。为此,我使用了TabHost。 当我开始这个活动我的应用程序崩溃与导航抽屉导航抽屉不工作与Tabview活动

07-20 14:48:52.891 2161-2161/com.lems.tcloud E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.lems.tcloud, PID: 2161 
    java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY. 
      at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:831) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
      at android.view.View.measure(View.java:17430) 
      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
      at android.view.Choreographer$ 

XML文件

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 

</android.support.v4.widget.DrawerLayout> 

代码导航抽屉

public class NavigationDrawer extends ActionBarActivity { 
    protected void onCreateDrawer(final int layoutResID) { 
     setContentView(R.layout.activity_navigation_drawer); 

     content = (FrameLayout) findViewById(R.id.content_frame); 
     getLayoutInflater().inflate(layoutResID, content, true); 

     mTitle = mDrawerTitle = getTitle(); 
     menuTitles = getResources().getStringArray(R.array.menu_array); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     mDrawerToggle = new ActionBarDrawerToggle((Activity) 
       this,     
       mDrawerLayout,   
       R.drawable.ic_drawer, 
       0, 
       0 
     ) { 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
       getSupportActionBar().setTitle(mTitle); 
      } 

      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getSupportActionBar().setTitle(mDrawerTitle); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
       R.layout.drawer_list, menuTitles)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    } 
} 

代码TabActivty

public class FavTabActivity extends NavigationDrawer { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     onCreateDrawer(R.layout.activity_fav_tab); 

     LocalActivityManager mLocalActivityManager = new LocalActivityManager(FavTabActivity.this, false); 
     mLocalActivityManager.dispatchCreate(savedInstanceState); 

     TabHost tabHost = (TabHost) findViewById(R.id.tabhost); 
     tabHost.setup(mLocalActivityManager); 

     TabHost.TabSpec spec; 
     Intent intent; 

     intent = new Intent(this,HotList.class); 
     spec = tabHost.newTabSpec("HOTLIST").setIndicator("HOTLIST"). 
       setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent(this,Settings.class); 
     spec = tabHost.newTabSpec("SETTINGS").setIndicator("SETTINGS"). 
       setContent(intent); 
     tabHost.addTab(spec); 


    } 

} 

用于TAbActivity的Xml文件

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    android:id="@+id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:id="@+id/linearLayout1" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 


     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@android:id/tabcontent" 
      android:layout_weight="1"> 
     </FrameLayout> 

     <TabWidget 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@android:id/tabs" 
      android:layout_weight="0" 
      android:layout_marginBottom="-4dp" 
      android:background="#FF0000"> 
     </TabWidget> 


    </LinearLayout> 
</TabHost> 

是否有任何不同的方式使用tabview与导航抽屉? 在我的情况下,我想每个活动的导航抽屉。也不能使用片段,因为有很多东西要做在我的活动。

回答

1

getView()方法是,在这种情况下,对于ListView中的各行布局

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="400px" 
    android:layout_height="800px" 

Eclipse中右键点击您的项目>选择Android的工具>充气支持库。

+0

我没有使用任何自定义适配器的列表视图。如果我设置宽度和高度为你说,那么我的布局会受到干扰。 – vijay

+0

如果您看到您正面临测量问题的日志,那么支持库不适合您。 – NovusMobile

+0

对于其他活动它工作正常。我正在使用android studio。 – vijay