0

我想在我的活動(主頁)上使用NavigationDrawer,但活動的內容未顯示。在多個活動中導航抽屜不起作用

home_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:id="@+id/home_activity"> 

<Button 
    android:id="@+id/like_count" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="likeCounter" 
    android:background="@drawable/likecountgreen" /> 

</LinearLayout> 

activity_drawer.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"> 
</FrameLayout> 

<ListView 
    android:id="@+id/nav_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#fff" 
    android:choiceMode="singleChoice" /> 

HomeActivity.class

public class HomeActivity extends BaseActivity { 

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

BaseActivity.class

public class BaseActivity extends ActionBarActivity implements AdapterView.OnItemClickListener { 

private ListView drawerList; 
private DrawerLayout drawerLayout; 
private ActionBarDrawerToggle mDrawerToggle; 
private String[] options; 

private TextView titleActionBar; 

protected void onCreateDrawer() { 
    setContentView(R.layout.activity_drawer); 

    setupActionBar(); 

    options = getResources() 
      .getStringArray(R.array.drawer_options); 

    drawerLayout = 
      (DrawerLayout) findViewById(R.id.drawer_layout); 

    drawerList = (ListView) findViewById(R.id.nav_drawer); 

    drawerList.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, options)); 

    drawerList.setOnItemClickListener(this); 

    setupDrawer(); 

} 

private void setupActionBar() { 
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    getSupportActionBar().setCustomView(R.layout.action_bar); 

    titleActionBar = (TextView) findViewById(R.id.title_action_bar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 
} 

private void setupDrawer() { 
    mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { 

     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      titleActionBar.setText("App"); 
      invalidateOptionsMenu(); 
     } 

     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      titleActionBar.setText("Options"); 
      invalidateOptionsMenu(); 
     } 
    }; 

    mDrawerToggle.setDrawerIndicatorEnabled(true); 
    drawerLayout.setDrawerListener(mDrawerToggle); 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    switch (position) { 
     case 2: 
      startActivity(new Intent(getApplicationContext(), LoginActivity.class)); 
      overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out); 
      drawerLayout.closeDrawer(drawerList); 
      break; 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.home_menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    if (id == R.id.action_search) { 
     return true; 
    } 

    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

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

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

}

我發現那是什麼drawer_activity被覆蓋home_activity。

我該如何解決?

回答

2

onCreateDrawer您正在設置一個新佈局,因此您在MainActivity中設置的佈局不再顯示。這裏是你如何解決這個問題:

HomeActivity:

public class HomeActivity extends BaseActivity { 

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

而在你BaseActivity:

protected FrameLayout content; 
protected void onCreateDrawer(final int layoutResID) { 
    setContentView(R.layout.activity_drawer); 

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

    setupActionBar(); 

    options = getResources() 
      .getStringArray(R.array.drawer_options); 

    drawerLayout = 
      (DrawerLayout) findViewById(R.id.drawer_layout); 

    drawerList = (ListView) findViewById(R.id.nav_drawer); 

    drawerList.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, options)); 

    drawerList.setOnItemClickListener(this); 

    setupDrawer(); 

} 

現在的FrameLayout在activity_drawer佈局包含您HomeActivity的佈局。