导航抽屉以在活动之间切换

3
我浏览了一下网站,但找不到解决我的问题的答案。我正在尝试使我的导航抽屉在活动之间切换而不是片段。我尝试使用switch语句,但所有操作都会导致应用程序崩溃。我不知道如何获取抽屉的单独元素,以便设置它们,以便如果按下一个元素,它将转到此页面,如果按下另一个元素,则转到其他页面等等。
这是我的代码:
package com.example.ColeraineTown;

imports...

public class HomeScreen extends Activity {

private String[] drawerListViewItems;
private DrawerLayout drawerLayout;
private ListView drawerListView;
private ActionBarDrawerToggle actionBarDrawerToggle;

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

    // get list items from strings.xml
    drawerListViewItems = getResources().getStringArray(R.array.items);
    // get ListView defined in activity_main.xml
    drawerListView = (ListView) findViewById(R.id.left_drawer);

    // Set the adapter for the list view
    drawerListView.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_listview_item, drawerListViewItems));

    // 2. App Icon
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    // 2.1 create ActionBarDrawerToggle
    actionBarDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            drawerLayout,         /* DrawerLayout object */
            R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description */
            R.string.drawer_close  /* "close drawer" description */
    );

    // 2.2 Set actionBarDrawerToggle as the DrawerListener
    drawerLayout.setDrawerListener(actionBarDrawerToggle);

    // 2.3 enable and show "up" arrow
    getActionBar().setDisplayHomeAsUpEnabled(true);

    drawerListView.setOnItemClickListener(new DrawerItemClickListener());
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    actionBarDrawerToggle.syncState();
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    // call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true
    // then it has handled the app icon touch event

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

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {

        drawerLayout.closeDrawer(drawerListView);

    }
}

我整天都在做这个,试图修复并使其正常工作,但是没有成功。花了我很长时间才让抽屉实际工作,如果一切都付诸东流,那将是一件遗憾的事情。

如果你们知道如何在活动之间切换的答案,那就太好了!

1个回答

11

假设您有5个项目(从0索引到4索引),每个索引标识您的项目中的一个活动。 您可以创建一个方法selectItem(int position)来了解用户选择了哪个抽屉项。

public void selectItem(int position) {
    Intent intent = null;
    switch(position) {
        case 0:
            intent = new Intent(this, Activity_0.class);
            break;
        case 1:
            intent = new Intent(this, Activity_1.class);
            break;

        ...


        case 4: 
            intent = new Intent(this, Activity_4.class);
            break;

        default : 
            intent = new Intent(this, Activity_0.class); // Activity_0 as default
            break;
    }

    startActivity(intent);
}

最后,将此方法添加到您的DrawerItemClickListener中:

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        selectItem(position);
        drawerLayout.closeDrawer(drawerListView);

    }
}

我认为这比使用Fragment更容易!!!


非常感谢,我一开始不知道如何使用位置函数,但是后来我理解了它的作用 :) - CyberHydra
好的,问题解决了吗?如果是的话,请不要忘记将答案标记为“正确”。点赞也会很高兴 :) - S.Thiongane
8
它能够运行,但是在你启动的活动中没有导航抽屉。 - Radoslav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接