Android RecyclerView之GridView显示(三)
效果图
垂直显示(标准显示) 垂直反向显示 水平显示 水平反向显示
Android RecyclerView详解(一)
Android RecyclerView之ListView显示(二)
Android RecyclerView之瀑布流显示(四)
Android RecyclerView之ListView显示
本博文讲述了运用RecyclerView替代ListView
在Android RecyclerView详解(一)中已经介绍过了RecyclerView的基本运用接下来我要使用强大RecyclerView来显示ListView的效果。
1.将RecyclerView添加到布局文件并关联兼容包(注意:低版本的安卓系统,要进行兼容包的关联)
步骤:按住control+alt+shift+s出现Project Structure按下图所示关联
关联成功后在主布局文件activity_main中添加RecyclerView
2.在与主类MainActivity同级下新建一个包名为menu在包中新建一个类为DateBean用于归纳信息
3.新建一个行布局名为grid_item,并添加一个ImageView和TextView
<?
xml version=
“1.0”
encoding=
“utf-8”
?>
<
LinearLayout
xmlns:
android
=
“http://schemas.android.com/apk/res/android”
android
:layout_width=
“match_parent”
android
:layout_height=
“match_parent”
android
:gravity=
“center”
android
:orientation=
“vertical”
>
<
ImageView
android
:id=
“@+id/item_list_icon”
android
:layout_width=
“80dp”
android
:layout_height=
“80dp”
android
:src=
“@mipmap/ic_launcher”
/>
<
TextView
android
:id=
“@+id/item_list_name”
android
:layout_width=
“wrap_content”
android
:layout_height=
“wrap_content”
android
:text=
“图片描述”
android
:textSize=
“20sp”
android
:textStyle=
“bold”
/>
</
LinearLayout
>
4.在res文件下新建一个包为menu在包中建一个menu布局文件用于显示下拉菜单
如果想了解详细的Menu菜单栏详细使用可以点击:Android Menu菜单栏
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_GridView" android:orderInCategory="100" android:title="GridView显示" app:showAsAction="never"> <menu> <item android:id="@+id/action_GridView_noraml" android:orderInCategory="100" android:title="标准" app:showAsAction="never"/> <item android:id="@+id/action_GridView_vertical_reverse" android:orderInCategory="100" android:title="垂直反向" app:showAsAction="never"/> <item android:id="@+id/action_GridView_horizontal" android:orderInCategory="100" android:title="水平" app:showAsAction="never"/> <item android:id="@+id/action_GridView_horizontal_reverse" android:orderInCategory="100" android:title="水平反向" app:showAsAction="never"/> </menu> </item> </menu>
5.RecyclerView适配器,
RecyclerView适配器的详细介绍可以点击:Android RecyclerView详解(一)
package
com.example.recyclerview_grid.adapter;
import
android.content.Context;
import
android.support.v7.widget.RecyclerView;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.ImageView;
import
android.widget.TextView;
import
com.example.recyclerview_grid.R;
import
com.example.recyclerview_grid.menu.DateBean;
import
java.util.List;
/**
* Date:2017/3/14
* author:陈箫阳ChenXiaoYang
* furction:
*/
public class
RecyclerViewGridAdapter
extends
RecyclerView.Adapter<RecyclerViewGridAdapter.GridViewHolder> {
private
Context
mContext
;
//泛型是RecyclerView所需的Bean类
private
List<DateBean>
mDateBeen
;
//构造方法,一般需要接收两个参数 1.上下文 2.集合对象(包含了我们所需要的数据)
public
RecyclerViewGridAdapter(Context context, List<DateBean> dateBeen) {
mContext
= context;
mDateBeen
= dateBeen;
}
@Override
public
RecyclerViewGridAdapter.GridViewHolder onCreateViewHolder(ViewGroup parent,
int
viewType) {
//转换一个ViewHolder对象,决定了item的样式,参数1.上下文 2.XML布局资源 3.null
View itemView = View.
inflate
(
mContext
, R.layout.
grid_item
,
null
);
//创建一个ViewHodler对象
GridViewHolder gridViewHolder =
new
GridViewHolder(itemView);
//把ViewHolder传出去
return
gridViewHolder;
}
//当ViewHolder和数据绑定是回调
@Override
public void
onBindViewHolder(RecyclerViewGridAdapter.GridViewHolder holder,
int
position) {
//从集合里拿对应的item的数据对象
DateBean dateBean =
mDateBeen
.get(position);
//给Holder里面的控件对象设置数据
holder.setData(dateBean);
}
//决定RecyclerView有多少条item
@Override
public int
getItemCount() {
//数据不为null,有几条数据就显示几条数据
if
(
mDateBeen
!=
null
&&
mDateBeen
.size() >
0
) {
return
mDateBeen
.size();
}
return
0
;
}
//自动帮我们写的ViewHolder,参数:View布局对象
public class
GridViewHolder
extends
RecyclerView.ViewHolder {
private final
ImageView
mImageView
;
private final
TextView
mTextView
;
public
GridViewHolder(View itemView) {
super
(itemView);
mImageView
= (ImageView) itemView.findViewById(R.id.
item_list_icon
);
mTextView
= (TextView) itemView.findViewById(R.id.
item_list_name
);
}
public void
setData(DateBean data) {
//给imageView设置图片数据
mImageView
.setImageResource(data.
icon
);
//给TextView设置文本数据
mTextView
.setText(data.
name
);
}
}
}
6.编写主类
package
com.example.recyclerview_grid;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.support.v7.widget.GridLayoutManager;
import
android.support.v7.widget.RecyclerView;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.widget.GridLayout;
import
android.widget.Toast;
import
com.example.recyclerview_grid.adapter.RecyclerViewGridAdapter;
import
com.example.recyclerview_grid.menu.DateBean;
import
java.util.ArrayList;
public class
MainActivity
extends
AppCompatActivity {
private
RecyclerView
mRecyclerVIew
;
@Override
protected void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.
activity_main
);
//初始化控件
mRecyclerVIew
= (RecyclerView) findViewById(R.id.
recyclerView
);
}
//RecyclerView实现GridView效果,实际就是布局管理器参数改为GridLayoutManager
private void
loadGridDate(Boolean inversion, Boolean orientation) {
//集合对象
ArrayList<DateBean> dateBeanArrayList =
new
ArrayList<>();
//给Bean类放数据,把装好数据的Bean类放到集合里
for
(
int
i =
0
; i <
20
; i++) {
//创建Bean类对象
DateBean dateBean =
new
DateBean();
//给benu类对象添加图片和信息
dateBean.
icon
= R.mipmap.
ic_launcher
;
dateBean.
name
=
“RecyclerViewGrid”
+ i;
//把Bean类放入集合
dateBeanArrayList.add(dateBean);
}
//创建适配器adapter对象 参数1.上下文 2.数据加载集合
RecyclerViewGridAdapter recyclerViewGridAdapter =
new
RecyclerViewGridAdapter(
this
, dateBeanArrayList);
//设置适配器
mRecyclerVIew
.setAdapter(recyclerViewGridAdapter);
//布局管理器对象 参数1.上下文 2.规定显示的行数
GridLayoutManager gridLayoutManager =
new
GridLayoutManager(
this
,
2
);
//通过布局管理器可以控制条目排列的顺序 true反向显示 false正常显示(默认)
gridLayoutManager.setReverseLayout(inversion);
//设置RecycleView显示的方向是水平还是垂直
//GridLayout.HORIZONTAL水平 GridLayout.VERTICAL默认垂直
// 三元运算符
gridLayoutManager.setOrientation(orientation ? GridLayout.
VERTICAL
: GridLayout.
HORIZONTAL
);
//设置布局管理器, 参数linearLayoutManager对象
mRecyclerVIew
.setLayoutManager(gridLayoutManager);
}
/*
*下面的代码和RecycleView没有关系,是菜单,方便RecycleView的展示
*/
//加载菜单布局
@Override
public boolean
onCreateOptionsMenu(Menu menu) {
//加载布局使用菜单特有方法,getMenuInflate对象
//参数1.菜单显示的布局 2.固定Menu
getMenuInflater().inflate(R.menu.
menu_main
, menu);
return true
;
}
//菜单按钮点击事件处理
@Override
public boolean
onOptionsItemSelected(MenuItem item) {
int
itemId = item.getItemId();
if
(itemId == R.id.
action_GridView_noraml
) {
//标准显示(垂直)
loadGridDate(
false
,
true
);
Toast.
makeText
(MainActivity.
this
,
“成功”
, Toast.
LENGTH_SHORT
).show();
return true
;
}
//GridView垂直反向显示
else if
(itemId == R.id.
action_GridView_vertical_reverse
) {
loadGridDate(
true
,
true
);
}
//GridView水平显示
else if
(itemId == R.id.
action_GridView_horizontal
) {
loadGridDate(
false
,
false
);
}
//GridView水平反向
else if
(itemId == R.id.
action_GridView_horizontal_reverse
) {
loadGridDate(
true
,
false
);
}
return super
.onOptionsItemSelected(item);
}
}