现在好多大神都在推崇RecyclerView的好用,于是一试,只是按展示来说,他确实比GridView和ListView要方便的多。RecyclerView Jar包下载
1.导入Jar包;
2.布局文件:很简单,MainActivity只有一个RecyclerView,另外在弄几个item的xml,内容自己定,代码比较简
单,这里就不贴出来了。详细见下文的Demo下载。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="visahall.cn.myrecyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerView"
android:paddingTop="15dp"></android.support.v7.widget.RecyclerView>
</RelativeLayout>
3.Adapter:
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<String> list;
private Context context;
public MyAdapter(List<String> list) {
this.list = list;
}
public MyAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view ;
RecyclerView.ViewHolder viewHolder = null;
switch (i){
case 0:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_first, viewGroup, false);
viewHolder = new ViewHodlerOne(view);
break;
case 1:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_second, viewGroup, false);
viewHolder = new ViewHodlerTwo(view);
break;
case 2:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_third, viewGroup, false);
viewHolder = new ViewHodlerThree(view);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
switch (getItemViewType(i)){
case 0:
ViewHodlerOne viewHodlerOne = (ViewHodlerOne) viewHolder;
viewHodlerOne.mImageView.setImageResource(R.mipmap.aa);
viewHodlerOne.mTextView.setText(i + "My Revien");
break;
case 1:
ViewHodlerTwo viewHodlerTwo = (ViewHodlerTwo) viewHolder;
viewHodlerTwo.btn.setText("Btn" + i);
break;
case 2:
ViewHodlerThree viewHodlerThree = (ViewHodlerThree) viewHolder;
viewHodlerThree.textView.setText("点击更换显示的字" + i);
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
if (position == 0){
return 0;
}else if (position == 1){
return 1;
}else {
return 2;
}
}
//ViewHodlerOne
class ViewHodlerOne extends RecyclerView.ViewHolder{
TextView mTextView;
ImageView mImageView;
public ViewHodlerOne(View itemView) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.text);
mImageView = (ImageView) itemView.findViewById(R.id.image);
}
}
//ViewHodlerOneTwo
class ViewHodlerTwo extends RecyclerView.ViewHolder{
Button btn;
public ViewHodlerTwo(View itemView) {
super(itemView);
btn = (Button) itemView.findViewById(R.id.btn);
}
}
//ViewHodlerThree
class ViewHodlerThree extends RecyclerView.ViewHolder{
TextView textView;
Button btn3;
public ViewHodlerThree(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.textView);
btn3 = (Button) itemView.findViewById(R.id.btn3);
}
}
}
4.MainActivty:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<String> list;
private RecyclerView.LayoutManager mLaoutManager;
private MyAdapter myAdapter;
private SpaceItemDecoration spaceItemDecoration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//数据源
list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add(i + "");
}
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
spaceItemDecoration = new SpaceItemDecoration(15); //为RecyclerView的各个Item设置间距 15dp
mLaoutManager = new LinearLayoutManager(MainActivity.this); //普通布局----ListView
// mLaoutManager = new GridLayoutManager(MainActivity.this, 2); //GridView --- 后面的参数为几列
// mLaoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); //瀑布流
// linearLayoutManager = new LinearLayoutManager(MainActivity.this);
// linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //横向布局
recyclerView.addItemDecoration(spaceItemDecoration);
recyclerView.setLayoutManager(mLaoutManager);
myAdapter = new MyAdapter(list);
recyclerView.setAdapter(myAdapter);
}
}
5.当然为了美观,我们要为Item添加上间距:
/**
*
* 为RecyclerView的各个Item设置间距
*
*/
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpaceItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (parent.getChildPosition(view) != 0){
outRect.top = space;
}
}
}
好了,代码中的注释都写的很清楚。