什么是RecyclerView?个人理解,它是一个在数据量大的时候,为了显示在界面上提供的灵活高效处理的控件。可以替代listview,gallery,gridview等控件。( 这个是复制的,可以忽略。。。)
因为这个是在android 在2014 的goole io大会说的,所以呢整个sdk 最起码更新到 21版本吧。
这样才有android-support-v7-recyclerview.jar 这个包。
看下项目结构
下面就简单的上代码了
activity_main.xml
<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"
tools:context="com.ngh.recucler.MainActivity" >
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
list_item.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="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp" />
</RelativeLayout>
MainActivity.java
package com.ngh.recucler;
import java.util.ArrayList;
import com.ngh.recucler.adapter.RecyleAdapter;
import com.ngh.recucler.adapter.RecyleAdapter.OnRecyclerViewItemClickListener;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnItemTouchListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
/**
* 测试界面
*
* @author ngh
*
* 2015年5月23日
*/
public class MainActivity extends Activity {
private RecyclerView recycle;
private RecyleAdapter adapter;
private ArrayList<String> list = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycle = (RecyclerView) findViewById(R.id.recycle);
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL); // 横滑,还是竖滑
recycle.setLayoutManager(manager); // 设置布局管理器
initData();
adapter = new RecyleAdapter(list, this);
recycle.setAdapter(adapter);
/* 设置单个item 的点击事件 */
adapter.setListener(new OnRecyclerViewItemClickListener() {
@Override
public void onClick(View view, int position) {
Toast.makeText(getBaseContext(), list.get(position), 0).show();
}
});
/**
* 绘制listView 的间隔线
*/
recycle.addItemDecoration(new RecyclerView.ItemDecoration() {
Paint paint = new Paint();
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(c, parent, state);
paint.setColor(Color.LTGRAY);
for (int i = 0, size = parent.getChildCount(); i < size; i++) {
View child = parent.getChildAt(i);
c.drawLine(child.getLeft(), child.getBottom(), child.getRight(), child.getBottom(), paint);
}
}
});
// 可以提高效率
recycle.setHasFixedSize(true);
}
/**
* 添加测试数据
*/
private void initData() {
for (int i = 0; i < 1000; i++) {
list.add("这是测是数据。。。" + i);
}
}
}
RecyleAdapter.java
package com.ngh.recucler.adapter;
import java.util.ArrayList;
import com.ngh.recucler.R;
import com.ngh.recucler.R.drawable;
import com.ngh.recucler.R.id;
import com.ngh.recucler.R.layout;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* RecyclerView 的适配Adapter
* @author ngh
*
* 2015年5月23日
*/
public class RecyleAdapter extends RecyclerView.Adapter<RecyleAdapter.ViewHolder> {
private ArrayList<String> list;
private Context context;
public RecyleAdapter(ArrayList<String> list, Context context) {
super();
this.list = list;
this.context = context;
}
// 点击监听事件 此处必须设置public 后期考虑到分包的问题
public interface OnRecyclerViewItemClickListener {
void onClick(View view, int position);
};
private OnRecyclerViewItemClickListener listener;
// 设置监听器
public void setListener(OnRecyclerViewItemClickListener listener) {
this.listener = listener;
}
@Override
public int getItemCount() {
// TODO Auto-generated method stub
return list.size();
}
/**
* 数据展示
*/
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
// TODO Auto-generated method stub
viewHolder.tv.setText(list.get(i));
/*item 的点击事件创建*/
viewHolder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(listener!=null){
listener.onClick(viewHolder.itemView, i);
}
}
});
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
// TODO Auto-generated method stub
View view = LinearLayout.inflate(context, R.layout.list_item, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
class ViewHolder extends RecyclerView.ViewHolder {
private ImageView iv;
private TextView tv;
public ViewHolder(View itemView) {
super(itemView);
iv = (ImageView) itemView.findViewById(R.id.iv);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}
效果图:(图片不好,将就看吧)