最终效果图
1.item_demo5.xml
<?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="wrap_content"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingRight="5dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:id="@+id/item_demo5_image"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/item_demo5_tv"
android:layout_margin="5dp"
android:background="#ff496b"
android:text="12344"
/>
</LinearLayout>
Demo5Adapter
public class Demo5Adapter extends RecyclerView.Adapter<Demo5Adapter.ViewHolder> {
/**
* 展示数据
*/
private ArrayList<String> mData;
public Demo5Adapter(ArrayList<String> data) {
this.mData = data;
}
public void updateData(ArrayList<String> data) {
this.mData = data;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
// 瀑布流样式外部设置spanCount为2,在这列设置两个不同的item type,以区分不同的布局
return position % 2;
}
@Override
public Demo5Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
parent = parent;
// 实例化展示的view
View v;
// if(viewType == 1) {
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_demo5, parent, false);
// }
// else {
// v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_staggered_item_two, parent, false);
// }
// 实例化viewholder
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(Demo5Adapter.ViewHolder holder, int position) {
// 绑定数据
holder.mTv.setText(mData.get(position));
int type = position % 2;
if(type == 0){
holder.imageView.setBackgroundResource(R.drawable.a);
}else {
holder.imageView.setBackgroundResource(R.drawable.ic_launcher);
}
}
@Override
public int getItemCount() {
return this.mData.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView mTv;
ImageView imageView;
public ViewHolder(View itemView) {
super(itemView);
mTv = (TextView) itemView.findViewById(R.id.item_demo5_tv);
imageView = (ImageView)itemView.findViewById(R.id.item_demo5_image);
}
}
}
activity_demo5.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.mac.mainapplication.Activity.Demo5Activity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:fadeScrollbars="true"
android:id="@+id/demo5_recycler_view">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
主界面代码
public class Demo5Activity extends AppCompatActivity {
private StaggeredGridLayoutManager mLayoutManager;
private RecyclerView mRecyclerView;
private ArrayList<String> data = new ArrayList<>();
private Demo5Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo5);
mLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView)findViewById(R.id.demo5_recycler_view);
mRecyclerView.setLayoutManager(mLayoutManager);
adapter = new Demo5Adapter(getData());
mRecyclerView.setAdapter(adapter);
}
private ArrayList<String> getData() {
final Random random=new Random();;
String []strArr = {"差不多完美的解决了间隔线的问题,有细心的同学可能发现,在RecyclerView滑动的时候上面一直有一条灰色的间隔线,这个可以通过取消xml布局文件中RecyclerView的paddingTop属性去掉顶部灰色的间隔线。"
,"总结","本篇文章主要介绍网格样式和瀑布流样式的RecyclerView,列表样式、网格样式和瀑布流样式在某种程度上是可以转换的。"
,"网格样式的布局管理器的spanCount设置为1,就是列表样式",
"目前为止关于RecyclerView的基本使用的介绍可以告一段落了,但其实关于RecyclerView深入使用可不止着一些,比如说单个Item横滑,拖动Item之间转换位置等等,官方都有提供,当然这些使用会在后面依次介绍。",
"我是好人","就是水平方向的列表","如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!"
,"竖直方向","Item是等宽,水平方向,那就是水平方向的网络样式","1","飞哥陪我过;歌撇根基稳固拼q"};
for(int i = 0; i < 100; i++) {
data.add(strArr[random.nextInt(strArr.length)]);
}
return data;
}
}