2014-02-22 51 views
0

我試圖做一個導航抽屜,我正在閱讀很多關於如何做到這一點的指南,我認爲它現在應該可以工作,但是當我點擊標題時(當我手動嘗試時)抽屜沒有打開打開它,那麼圖標會變小,但仍然沒有菜單出現)。此外,我沒有得到任何錯誤或異常,所以我想我可能會錯過我無法弄清楚的事情。 這是我BaseActivity的代碼(抽屜活性,其被通過延長我MainActivity):這個導航抽屜爲什麼不能打開?

import android.os.Bundle; 
import android.app.Activity; 
import android.content.res.Configuration; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class BaseActivity extends Activity { 
    public DrawerLayout drawerLayout; 
    public ListView drawerList; 
    private String[] drawerListEntries; 
    private ActionBarDrawerToggle drawerToggle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 

     drawerListEntries = getResources().getStringArray(R.array.drawer_items); 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) 
     { 
      public void onDrawerClosed(View view) 
      { 
       getActionBar().setTitle(R.string.app_name); 
      } 

      public void onDrawerOpened(View drawerView) 
      { 
       getActionBar().setTitle(R.string.hello_world); 
      } 
     }; 
     drawerLayout.setDrawerListener(drawerToggle); 


     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     drawerList = (ListView) findViewById(R.id.drawer_list); 
     drawerList.setAdapter(new ArrayAdapter<String>(getBaseContext(), R.layout.drawer_list_item, drawerListEntries)); 



     drawerList.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) { 
       String selectedValue = (String) drawerList.getAdapter().getItem(pos); 
       Toast.makeText(getBaseContext(), selectedValue, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (drawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 

    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     drawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     drawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     boolean drawerOpen = drawerLayout.isDrawerOpen(drawerList); 
     menu.findItem(R.id.action_user).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 
} 

這是我的activity_base.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/drawer_list" 
     android:layout_width="240dp" 
     android:layout_height="wrap_content" 
     android:background="@color/light_blue" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:choiceMode="singleChoice" 
     android:layout_gravity="start" 
     /> 


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

這是我的drawer_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/drawer_list_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_marginTop="12dp" 
     android:textSize="24sp" 
     android:textColor="@color/belize_hole" 
     android:fontFamily="sans-serif-light"> 
    </TextView> 



</LinearLayout> 

這是我的MainActivity.java,它延伸到BaseActivity

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


public class HomeActivity extends BaseActivity { 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_home); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.home, menu); 
     //return super.onCreateOptionsMenu(menu); 
     return true; 
    } 


} 

任何人都可以看到問題?

+2

,但你可以通過「R.layout.activity_home」重寫你的內容查看。如果你會評論'setContentView(R.layout.activity_home);'? – nikis

+0

@nikis非常感謝,它現在有效。但是我不明白的是:關於MainActivity本身的佈局以及擴展BaseActivity的其他任何活動?因爲我想要幾乎所有活動的導航抽屜。並把你的答案放在一個問題中,以便我可以接受你的問題。 – Loolooii

回答

2

通過在HomeActivity中調用setContentView(R.layout.activity_home);可以從BaseActivity覆蓋內容視圖。

我建議你改用片段,而不是活動,抽屜式導航,這是最好的方式。因此,您將使用Navigation Drawer進行一項託管活動,例如,您只能在FrameLayout內切換視圖。看看這裏http://developer.android.com/training/implementing-navigation/nav-drawer.html