Android开发之RecyclerView的基本使用(实现常用的4种效果)
来源:互联网 发布:java多线程售票系统 编辑:程序博客网 时间:2024/06/13 23:51
recyclerView的强大无需我多言,现在来总结一下recyclerView的常用的4种效果。
第一种效果:listView垂直效果(这个最常用)
第二种效果:gridview效果
第三种效果:水平效果
第四种效果:瀑布流效果
-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
开始代码走起......
第一种效果的核心代码(listView垂直显示效果):
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));第二种效果的核心代码(gridview效果):
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));第三种效果的核心代码(水平效果):
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));第四种效果的核心代码(瀑布流效果):
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL));
-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
可能上面区区四行代码对于刚入门的小白有点蒙蔽,好啦下面开始撸起recyclerView的另一个核心之处adapter
新建一个MyRecyclerViewAdapter类继承自RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder>
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { private ArrayList<String> mList; public MyRecyclerAdapter(ArrayList<String> list) { mList = list; } @Override public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyRecyclerAdapter.MyViewHolder holder, int position) { holder.tv.setText(mList.get(position)); } @Override public int getItemCount() { return mList.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } }}
public class MyStaggedRecyclerAdapter extends RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder> { private ArrayList<String> mList; private List<Integer> heights; public MyStaggedRecyclerAdapter(ArrayList<String> list) { mList = list; heights = new ArrayList<Integer>(); for (int i = 0; i < list.size(); i++) { heights.add((int) (200 + Math.random() * 50)); } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { //绑定数据 LayoutParams layoutParams = holder.tv.getLayoutParams(); layoutParams.height = heights.get(position); holder.tv.setBackgroundColor(Color.rgb(100, (int) (Math.random() * 255), (int) (Math.random() * 255))); holder.tv.setLayoutParams(layoutParams); holder.tv.setText(mList.get(position)); } @Override public int getItemCount() { return mList.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } }
}
public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private ArrayList<String> mList; private MyRecyclerAdapter mRecyclerAdapter; private MyStaggedRecyclerAdapter myStaggedRecyclerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.rv); mRecyclerAdapter = new MyRecyclerAdapter(getData());// mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//默认listView垂直效果// mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));// mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//gridview效果 myStaggedRecyclerAdapter = new MyStaggedRecyclerAdapter(getData()); //瀑布流效果 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL)); mRecyclerView.setAdapter(myStaggedRecyclerAdapter); } protected ArrayList<String> getData() { mList = new ArrayList<String>(); for (int i = 0; i < 30; i++) { mList.add("第" + i + "个item"); } return mList; }}
build.gradle里面加入:compile 'com.android.support:recyclerview-v7:25.2.0'即可
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' compile 'com.android.support:recyclerview-v7:25.2.0'}
-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
下一章继续实现recyclerView的其他效果。。。
2 0
- Android开发之RecyclerView的基本使用(实现常用的4种效果)
- Android开发之TabLayout的使用(实现三种常用的选项卡效果)
- 【Android开发】RecyclerView的基本使用
- Android RecyclerView 的基本使用之GridView
- Android控件之RecyclerView的基本使用
- Android组件之RecyclerView的基本使用
- Android开发之实现瀑布流效果(RecyclerView)
- Android开发之RecyclerView的使用
- Android 开发之RecyclerView的使用
- Android RecyclerView的基本使用
- Android RecyclerView 的基本使用
- Android RecyclerView 的基本使用
- Android之RecyclerView 实现真正的Gallery效果
- Android时间轴(Timeline)效果的实现(使用RecyclerView)
- android常用控件RecyclerView(三) RecyclerView的使用
- Android之TabLayout+抽屉式效果和RecyclerView的使用
- Android开发之实现水平滚动效果—RecyclerView
- 【Android】Android中的RecyclerView的基本使用
- HTML CSS笔记
- 添加时间联系人添加两次,两次请求
- [LeetCode]501. Find Mode in Binary Search Tree
- 第十三周:( LeetCode583) Delete Operation for Two Strings(c++)
- 仿微信:Activity跟随手指滑动效果SlideFinishActivity
- Android开发之RecyclerView的基本使用(实现常用的4种效果)
- Fragment坑之Can not perform this action after onSaveInstanceState
- java虚拟机(一知半解)
- 数据结构——树形结构概念
- for循环的三种方式
- HDU 3951 Coin Game
- Apache-NiFi授权与用户认证
- dokuwiki常用操作
- 蓝桥杯之二阶魔方旋转(第二种方法)