如何使用菜单列表中的 RecycleView Android 获得网格布局和线性布局
How to have gridlayout and linearlayout using RecycleView Android from Menu list
我有一个列表,但我想为用户提供一个选项,让他们在列表或网格中查看它。选项在菜单中。这是 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 布局上。它在那里工作正常。我的主要观点是如何设置菜单,它将布局更改为这两个中的任何一个:
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
适配器工作正常。我只需要弄清楚 onclick 将如何改变布局。谢谢
在点击监听器中,只需设置新的布局管理器并重新设置适配器:
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
为了优化代码,您可以在class中添加一个布尔变量,以了解哪个LayoutManager
已经被使用。
例如:
case R.id.menu_switch_view:
isGridLayout = !isGridLayout;
recyclerView.setLayoutManager(isGridLayout ? new GridLayoutManager(this, 2) : new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
break;
如果您使用的是工具栏但未设置为带有 AppCompat 的 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;
}
});
如果您使用工具栏作为 ActionBar 即 setSupportActionBar(toolbar);
那么您只需定期扩充菜单并添加 onOptionsItemSelected(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);
}
为简单起见,我省略了您必须使用 ActionBar 或 ActionBarSherlock 扩展菜单的其他几个选项,但 onMenuItemClick 是非常标准的,因此,只需使用 switch 语句即可。
祝你好运,编码愉快!
我有一个列表,但我想为用户提供一个选项,让他们在列表或网格中查看它。选项在菜单中。这是 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 布局上。它在那里工作正常。我的主要观点是如何设置菜单,它将布局更改为这两个中的任何一个:
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
适配器工作正常。我只需要弄清楚 onclick 将如何改变布局。谢谢
在点击监听器中,只需设置新的布局管理器并重新设置适配器:
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
为了优化代码,您可以在class中添加一个布尔变量,以了解哪个LayoutManager
已经被使用。
例如:
case R.id.menu_switch_view:
isGridLayout = !isGridLayout;
recyclerView.setLayoutManager(isGridLayout ? new GridLayoutManager(this, 2) : new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
break;
如果您使用的是工具栏但未设置为带有 AppCompat 的 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;
}
});
如果您使用工具栏作为 ActionBar 即 setSupportActionBar(toolbar);
那么您只需定期扩充菜单并添加 onOptionsItemSelected(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);
}
为简单起见,我省略了您必须使用 ActionBar 或 ActionBarSherlock 扩展菜单的其他几个选项,但 onMenuItemClick 是非常标准的,因此,只需使用 switch 语句即可。
祝你好运,编码愉快!