Android RecyclerView之GridView显示(三)

Android RecyclerView之GridView显示(三)
效果图
  垂直显示(标准显示)       垂直反向显示            水平显示               水平反向显示
《Android RecyclerView之GridView显示(三)》《Android RecyclerView之GridView显示(三)》《Android RecyclerView之GridView显示(三)》《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按下图所示关联
《Android RecyclerView之GridView显示(三)》
关联成功后在主布局文件activity_main中添加RecyclerView

《Android RecyclerView之GridView显示(三)》

2.在与主类MainActivity同级下新建一个包名为menu在包中新建一个类为DateBean用于归纳信息

《Android RecyclerView之GridView显示(三)》

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

}
}

    原文作者:Android开发-CXY
    原文地址: https://blog.csdn.net/codefarmercxy/article/details/62230057
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞