2015-07-20 85 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