RecyclerView是什麼?
RecyclerView是一種新的視圖組,目標是爲任何基於適配器的視圖提供相似的渲染方式。它被作爲ListView和GridView控件的繼承者,在最新的support-V7版本中提供支持。
RecyclerView架構,提供了一種插拔式的體驗,高度的解耦,異常的靈活,通過設置它提供的不同LayoutManager,ItemDecoration , ItemAnimator實現令人瞠目的效果。
總之ListView和GridView能做的RecyclerView都能做,並且能實現瀑布流效果。
一般使用步驟:
1.在build.gradle配置RecyclerView的庫
compile 'com.android.support:recyclerview-v7:23.3.0'
2.在佈局文件寫定義RecyclerView
<?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:orientation="vertical">
.
.
.
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
3.在代碼中
(1)實例化RecyclerView
(2)初始化數據
(3)設置適配器
(4)設置LayoutManager
.
.
private RecyclerView recyclerview;
private ArrayList<String> datas;
private MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1 實例化RecyclerView
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
initData();
//3 設置RecyclerView的適配器
adapter = new MyAdapter(RecyclerViewActivity.this,datas);
recyclerview.setAdapter(adapter);
//4.設置LayoutManager
recyclerview.setLayoutManager(new LinearLayoutManager(RecyclerViewActivity.this, LinearLayoutManager.VERTICAL, false));
}
/**
* 2 初始化數據
*/
private void initData() {
datas = new ArrayList<>();
for (int i = 0; i < 100; i++) {
datas.add("Content" + i);
}
}
4.自定義適配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private final Context context;
private final ArrayList<String> datas;
public MyAdapter(Context context,ArrayList<String> datas){
this.context = context;
this.datas = datas;
}
/**
* 相當於ListView適配器中的getView的創建holder佈局
*
* @param parent
* @param viewType
* @return
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item_hello, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv_text.setText(datas.get(position));
holder.iv_icon.setBackgroundResource(R.mipmap.ic_launcher);
}
@Override
public int getItemCount() {
return datas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv_text;
private ImageView iv_icon;
public MyViewHolder(View itemView) {
super(itemView);
tv_text = (TextView) itemView.findViewById(R.id.tv_text);
iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);
}
}
}
5.設置Item佈局:
item_hello.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#33000000"
android:padding="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:src="@drawable/default" />
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:padding="3dp"
android:text="內容"
android:textColor="#000000"
android:textSize="15sp" />
</LinearLayout>
</RelativeLayout>
使用上其實和ListView差不多。