【问题标题】:How to attach an onclick listener to Android Studio's navigation drawer activity?如何将 onclick 监听器附加到 Android Studio 的导航抽屉活动?
【发布时间】:2014-11-17 23:51:32
【问题描述】:

我试图在 Android Studio 中创建一个具有导航抽屉的应用程序。

我正在使用 Android Studio(测试版)0.8.14。在这个版本中,有一个导航抽屉活动。我能够使用这段代码和我的字符串文件中的相应值为我的导航抽屉菜单设置标签

public void onSectionAttached(int number) {
        switch (number) {
            case 1:
                mTitle = getString(R.string.login);
                break;
            case 2:
                mTitle = getString(R.string.sign_up);
                break;
            case 3:
                mTitle = getString(R.string.view_map);
                break;
            case 4:
                mTitle = getString(R.string.about);
                break;
            case 5:
                mTitle = getString(R.string.version);
        }
    }

看起来很不错,但我不知道如何为每个项目添加 onClickListeners。

我还在我的 NavigationDrawerFragment.java(由 Android Studio 自动创建)中添加了这个:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);
        mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                selectItem(position);
            }
        });
        mDrawerListView.setAdapter(new ArrayAdapter<String>(
                getActionBar().getThemedContext(),
                android.R.layout.simple_list_item_activated_1,
                android.R.id.text1,
                new String[]{
                        getString(R.string.login),
                        getString(R.string.sign_up),
                        getString(R.string.view_map),
                        getString(R.string.about),
                        getString(R.string.version),
                }));
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
    }

我想为每个列表项启动一个不同的活动,但我不明白如何,不幸的是我似乎找不到使用 Android Studio 内置导航抽屉活动的教程。

另外,是否可以在我的所有活动中使用此导航抽屉?每次创建新 Activity 时都需要创建新的抽屉式导航片段吗?

提前致谢!

【问题讨论】:

    标签: android android-studio navigation-drawer


    【解决方案1】:

    拥有一个导航抽屉的想法是使用片段。每当您单击导航抽屉中的项目时,启动新活动的效率不会很高。

    在您的selectItem(position) 方法中,您可以执行一些代码来为导航抽屉中的列表项创建新片段。每个导航项应该是一个不同的片段,然后只需使用片段事务将其添加到主活动的容器视图中。

    作为该方法的一个简单示例:

    private void selectItem(int position) {
    
    FragmentManager fragmentManager = getFragmentManager();
    
            switch(position) {
                //fragment for position 0
                case 0:
                    fragmentManager.beginTransaction()
                            .replace(R.id.container, new Fragment0())
                            .commit();
                    break;
                //fragment for postion 1
                case 1:
                    fragmentManager.beginTransaction()
                            .replace(R.id.container, new Fragment1())
                            .commit(); 
                    break;
                //fragment for position 2
                case 2:
                    fragmentManager.beginTransaction()
                            .replace(R.id.container, new Fragment2())
                            .commit(); 
                    break;             
                default:
                    break;
            }
    }
    

    这可能不是您想要的,但它是您想要完成的一个选项。

    作为一个注释,为了让 onSectionAttached() 工作,你所有的框架都必须调用它来将它们的标题传递给主要活动。

    查看this链接了解更多信息。

    【讨论】:

    • 谢谢,我很难理解片段。他们现在更有意义了。很难理解为什么我会使用看起来如此相似的片段和活动。
    【解决方案2】:

    为了将 onclicklisteners 放在导航抽屉上,只需在要更改标题栏的代码行下方(即在 switch case 块中)放置一个意图 例如

    case 1:    
    mTitle = getString(R.string.login);    
    Intent transfer = new Intent(HomeFragment.this,NextActivity.class);    
    startActivity(transfer);  
    

    这将为您解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多