如何使用菜单列表中的RecycleView Android进行gridlayout和linearlayout

时间:2015-12-08 16:30:15

标签: android android-layout android-studio android-recyclerview gridlayoutmanager

我有一个列表,但我想为用户提供一个选项,以便在列表或网格中查看它。选项在菜单中。这是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位于“活动”布局上。它在那里工作得很好。我的主要观点是如何设置菜单,它将布局改为这两者中的任何一个:

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

适配器工作正常。我只需要弄清楚onclick将如何改变布局。感谢

2 个答案:

答案 0 :(得分:2)

如果您正在使用工具栏但未将其设置为带有AppCompat的ActionBar,则可以通过向工具栏添加菜单来处理此问题:

library(dplyr)

df %>%
  group_by(Site) %>%
  sample_n(1)

# Source: local data frame [3 x 3]
# Groups: Site [3]
#  
#         Site      Date Ladybug
#       (fctr)    (fctr)   (int)
# 1 Baumgarten 8/20/2014       3
# 2  Berkevich 8/22/2014       0
# 3      Boehm 6/24/2014       2

如果您使用工具栏作为ActionBar,即 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; } }); ,那么您只需定期对菜单进行充气并添加onOptionsItemSelected(MenuItem):

setSupportActionBar(toolbar);

然后我会用这样的东西来做这项工作:

@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);
}

为简单起见,我省略了使用ActionBar或ActionBarSherlock来扩展菜单的其他几个选项,但onMenuItemClick非常标准,所以只需使用switch语句即可。

祝你好运,快乐的编码!

答案 1 :(得分:0)

在单击侦听器中,只需设置新的布局管理器并重新设置适配器:

recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

对于代码优化,您可以在类中添加一个布尔变量,以了解已使用的LayoutManager

例如:

case R.id.menu_switch_view:
     isGridLayout = !isGridLayout;
     recyclerView.setLayoutManager(isGridLayout ? new GridLayoutManager(this, 2) : new LinearLayoutManager(this));
     recyclerView.setAdapter(mAdapter);
break;