Android控件RecyclerView與ListView的異同
優點:Android中RecyclerView控件支援線性布局、網格布局、瀑布流布局 三種,還可以而且同時還能夠控制橫向和縱向滾動。自帶添加item和删除item的動畫效果
缺點:RecyclerView自身沒有點選事件,需要寫接口,在onBindViewHolder方法中添加點選事件
實作效果圖:
第一步:在build.gradle中添加一行,引用類庫
compile 'com.android.support:recyclerview-v7:23.2.1'
第二步:在activity_main.xml檔案中,添加控件
<android.support.v7.widget.RecyclerView
android:id="@+id/recy_list"
android:dividerHeight="1dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
第三步:建立一個item.xml,這個布局主要用于顯示RecyclerView清單項的布局,讀者可根據實際情況自行添加
第四步:建立一個擴充卡,用于設定RecyclerView的清單項布局,并且添加點選事件
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
private OnItemClickListener mOnItemClickListener;
private List<Bitmap> mDatas;
private Context mContext;
private LayoutInflater inflater;
public MyRecyclerAdapter(Context context, List<Bitmap> datas){
this. mContext=context;
this. mDatas=datas;
inflater=LayoutInflater. from(mContext);
}
@Override
public int getItemCount() {
return mDatas.size();
}
//重寫onCreateViewHolder方法,傳回一個自定義的ViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.item_home,parent, false);
MyViewHolder holder= new MyViewHolder(view);
return holder;
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView iv;
public MyViewHolder(View view) {
super(view);
iv=(ImageView) view.findViewById(R.id.iv_item_adapter);
}
}
public interface OnItemClickListener{
void onClick( int position);
void onLongClick( int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
this.mOnItemClickListener=onItemClickListener;
}
//填充onCreateViewHolder方法傳回的holder中的控件
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder. iv.setImageBitmap(mDatas.get(position));
if( mOnItemClickListener!= null){
holder. itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onClick(position);
}
});
holder. itemView.setOnLongClickListener( new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mOnItemClickListener.onLongClick(position);
return false;
}
});
}
}
}
第五步:在MainActivity檔案中,導入布局,設定擴充卡
public class MainActivity extends Activity {
//參考網址 https://blog.csdn.net/dmk877/article/details/50816933
private RecyclerView recyclerView;
private List<Bitmap> mDatas;
private MyRecyclerAdapter recycleAdapter;
@SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. test);
recyclerView = (RecyclerView) findViewById(R.id.recy_list);
initData();
recycleAdapter= new MyRecyclerAdapter(ImageActivity.this , mDatas );
/**第一種形式:普通的listview清單效果
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//設定布局管理器
recyclerView.setLayoutManager(layoutManager);
//設定為垂直布局,這也是預設的
layoutManager.setOrientation(OrientationHelper.VERTICAL);
//設定Adapter
recyclerView.setAdapter( recycleAdapter);
//設定增加或删除條目的動畫
recyclerView.setItemAnimator(new DefaultItemAnimator()); */
/**第二種形式:設定成gridview形式
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//設定布局管理器
recyclerView .setLayoutManager(new GridLayoutManager( this,4));
//設定為垂直布局,這也是預設的
layoutManager.setOrientation(OrientationHelper.VERTICAL);
//設定Adapter
recyclerView.setAdapter( recycleAdapter);
//設定增加或删除條目的動畫
recyclerView.setItemAnimator(new DefaultItemAnimator());
*/
/**第三種形式:橫向左右滑動
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL);
//設定布局管理器
recyclerView.setLayoutManager(layoutManager);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setAdapter( recycleAdapter);
//設定增加或删除條目的動畫
recyclerView.setItemAnimator(new DefaultItemAnimator());
*/
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//設定布局管理器
recyclerView .setLayoutManager(new GridLayoutManager( this,4));
//設定為垂直布局,這也是預設的
layoutManager.setOrientation(OrientationHelper.VERTICAL);
//設定Adapter
recyclerView.setAdapter( recycleAdapter);
//設定增加或删除條目的動畫
recyclerView.setItemAnimator(new DefaultItemAnimator());
recycleAdapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
@Override
public void onLongClick(int position) {
Toast.makeText(ImageActivity.this,"onLongClick事件您點選了第:"+position+"個Item",Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(int position) {
Toast.makeText(ImageActivity.this,"onClick事件您點選了第:"+position+"個Item",Toast.LENGTH_SHORT).show();
}
});
}
private void initData() {
mDatas = new ArrayList<Bitmap>();
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a1));
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a2));
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a3));
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a4));
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a5));
mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a6));
}
}