RecycleView是android5.0中的控件,是用来替换ListView,GridView的,RecycleView需要自己写点击事件 二不能像ListView直接设置操作灵活,这样的新东西肯定是要学习的。下面就学习的结果做总结。
1、要先导入android-support-v7-recycleview.jar包到项目中。
2、新建布局文件添加控件
<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.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</RelativeLayout>
3、在activity中得到该控件,在activity中如果可以确定每个item的高度是固定的,设置这个选项可以提高性 能recyclerview.setHasFixedSize(true); 生成LinearLayoutManager,设置方向
linearlayoutmanager = new LinearLayoutManager(ct);
linearlayoutmanager.setOrientation(oritation);
设置动画
recyclerview.setItemAnimator(new DefaultItemAnimator());
添加分割线
recyclerview.addItemDecoration();
实例化适配器
adapter = new RecycleAdapter(ct,list);
设置适配器
recyclerview.setAdapter(adapter);
4、定义数据适配器和点击事件 自定义监听事件接口
public interface ItemClickListener
{
public void onItemLongClick(View view, int postion);
public void onItemClick(View view, int postion);
public void onItemSubViewClick(View view, int postion);
}
自定义适配器
public class RecycleAdapter extends Adapter<RecycleAdapter.MViewHolder>
{
定义一个RecycleView的适配器 *
新建一个类继承自Adapter<RecycleAdapter.MViewHolder>
实现三个父类方法
onCreateViewHolder 创建新View,被LayoutManager所调用
onBindViewHolder 将数据与界面进行绑定的操作
getItemCount 获取数据的数量
MViewHolder 自定义的ViewHolder,持有每个Item的的所有界面元素 *
private ItemClickListener itemclicklistener;
private Context ct; private List<String> list;
@Override
public int getItemCount() {
return list.size();
}
public RecycleAdapter(Context ct,List<String> list){
super();
this.ct=ct;
this.list=list;
}
提供activity调用传入接口实现
public void setItemClickListener(ItemClickListener mItemClickListener)
{
this.itemclicklistener = mItemClickListener;
}
@Override
public MViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
创建子视图View,将view传入自定义的ViewHolder
View view = View.inflate(ct,R.layout.item_user_friend_nod,null);
MViewHolder mviewhHolder = new MViewHolder(view);
return mviewhHolder;
}
@Override
public void onBindViewHolder(
final MViewHolder mViewHolder, final int postion) {
绑定子视图控件数据
mViewHolder.textview.setText("1");
mViewHolder.textview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(itemclicklistener!=null){ itemclicklistener.onItemSubViewClick(mViewHolder.textview, postion);
}
}
});
}
public class MViewHolder extends RecyclerView.ViewHolder {
TextView textview;
public MViewHolder(final View view) {
super(view);
this.textview = (TextView) view.findViewById(R.id.tv_friend_name); view.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(itemclicklistener!=null){ itemclicklistener.onItemLongClick(view,getPosition());
}
return true;
}
});
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(itemclicklistener!=null){
itemclicklistener.onItemClick(view, getPosition());
}
}
});
}
}}
activity调用
public class MainActivity extends Activity {
private RecyclerView recyclerview;
List<String> list;
LinearLayoutManager linearlayoutmanager;
Context ct;
RecycleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ct = this;
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
list = new ArrayList<String>();
for (int i = 0; i < 30; ++i) {
list.add("第"+i+1+"位");
}
setRecyclerView(LinearLayoutManager.VERTICAL);
}
public void setRecyclerView(int oritation){
recyclerview.setHasFixedSize(true);
linearlayoutmanager = new LinearLayoutManager(ct);
linearlayoutmanager.setOrientation(oritation); recyclerview.setLayoutManager(linearlayoutmanager);
recyclerview.setItemAnimator(new DefaultItemAnimator());
recyclerview.addItemDecoration(
new ItemDecoration() { });
adapter = new RecycleAdapter(ct,list);
adapter.setItemClickListener(new ItemClickListener() {
@Override
public void onItemSubViewClick(View view, int postion) {
Toast.makeText(ct,"点击了第"+postion+"个内部TextView",0).show();
}
@Override
public void onItemLongClick(View view, int postion) {
Toast.makeText(ct,"长按了第"+postion+"个",0).show();
}
@Override
public void onItemClick(View view, int postion) {
Toast.makeText(ct,"点击了第"+postion+"个",0).show();
}
});
recyclerview.setAdapter(adapter);
}}