导航抽屉多项活动无法正常工作 [英] Navigation Drawer in multiple activities does not work

查看:116
本文介绍了导航抽屉多项活动无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用NavigationDrawer在我的活动(家庭),但活动的内容不会显示。

I'm trying to use NavigationDrawer on my activity (Home), but the content of activity is not shown.

home_activity.xml

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

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

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

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。

What I've discovered is that drawer_activity is overlaying home_activity.

我该如何解决呢?

推荐答案

onCreateDrawer 要设置一个新的布局,让您在MainActivity设置您的布局是不是不再显示。这里是如何解决这个问题:

In onCreateDrawer you are setting a new layout, so your layout that you set in your MainActivity is not shown anymore. Here is how you can solve this:

HomeActivity:

HomeActivity:

public class HomeActivity extends BaseActivity {

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

而在你的BaseActivity:

And in your 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();

}

现在你activity_drawer布局的FrameLayout包含您HomeActivity的布局。

Now the FrameLayout in your activity_drawer layout contains the layout of your HomeActivity.

这篇关于导航抽屉多项活动无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆