如何有 gridlayout 和 linearlayout 使用 RecycleView Android 从 Menu 列表

发布时间: 2016/9/16 13:36:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个列表,但我想要给用户一个选项 view 它在列表或网格。选择是在 menu 。这里是 menu_user_list.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ui.user.UserListActivity">
<item android:id="@+id/action_settings" android:title="@string/action_settings" android:orderInCategory="100" app:showAsAction="never" />
<item android:id="@+id/action_listview" android:title="List" app:showAsAction="never" android:onClick="showlist" android:orderInCategory="200"/>
<item android:id="@+id/action_gridview" android:title="Grid" app:showAsAction="never" android:onClick="showgrid" android:orderInCategory="300"/>

我怎么可以这样?

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.activity_user_list_recyclerView);

R.id.activity_user_list_recyclerView 位于 Activity layout 。它那里工作正常。我的主要 point 是如何可以设置 menu ,它将会改变 layout 两个两个︰

recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
recyclerView.setLayoutManager(new LinearLayoutManager(this));

adapter工作正常。我只是需要弄清 onclick 将如何改变 layout 。谢谢你

解决方法 1:

如果你正在使用一个工具栏,但未设置为 ActionBar 与 AppCompat 你会处理这通过添加 menu 添加到工具栏上︰

 Toolbar toolbar = (Toolbar) findViewById(R.id.myToolbar);
 toolbar.inflateMenu(R.menu.my_menu);

 // Then set an OnMenuItemClickListener
 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {

            int itemId = item.getItemId();

            switch(itemId){

                case R.id.action_settings:

                    // handle settings
                    break;

                case R.id.action_listview:

                    // Setup the LinearLayoutManager
                    initListDisplay();
                    break;


                case R.id.action_gridview:

                    // Setup the GridLayoutManager
                    initGridDisplay();
                    break; 
            }

            return true;
        }
    });

如果您使用工具栏为您 ActionBarsetSupportActionBar(toolbar); ,那么你会 inflate menu 定期和添加自动调用 ( MenuItem ):

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    switch(id){

        case R.id.action_settings:

            // handle settings
            break;

        case R.id.action_listview:

            // Setup the LinearLayoutManager
            initListDisplay();
            break;


        case R.id.action_gridview:

            // Setup the GridLayoutManager
            initGridDisplay();
            break;

    }
    return super.onOptionsItemSelected(item);
}

然后我会用这样的事情来做这项工作︰

// Display a list
private void initListDisplay(){
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);
}

// Display the Grid
private void initGridDisplay(){
    GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
    layoutManager.setOrientation(GridLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
}

为简单起见,我遗漏了你要的其他几个选项 inflate 菜单与 ActionBar 或 ActionBarSherlock,但 onMenuItemClick 是相当标准如此,只是用你可以用 switch 语句。

祝你好运和幸福编码 !

官方微信
官方QQ群
31647020