RecyclerView 是现在广泛流行,灵活, 低耦合,代替了ListView,GridView。 具体实现步骤类似有list view 今天就简单介绍下
RecyclerView 在support.v7.包下, 用时候需要配置
具体使用步骤:
一 . 在配置地方搜 support.v7.widget.RecyclerView
配置还后你会发现在自己的 app bulid.geadle 增加了compile 'com.android.support:recyclerview-v7:24.0.0'
二 . 具体情况就和我们使用xml 控件一样
1 在自己布局文件 里用 RecyclerView 控件
2 在activity 里初始化布局文件 findViewById ()
3 创建自己的数据源 list 并且初始化使其有意义
4 写 我们的适配器
5 在activity 初始化我们的适配器
6 setAdapter(自己的适配器)
以上你会发现,这正是我们ListView 使用步骤现在还没有看到 RecyclerView 的优势,那么继续向下看
三. 在以上第3 步后边 我们获得到布局管理者, 对布局样式进行设置 纵向 LinearLayoutManager.VERTICAL, 横向 HORIZONTAL
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerRV.setLayoutManager(mLayoutManager);
设置添加删除item时候的动画 recyclerRV.setItemAnimator(new DefaultItemAnimator());
四. RecyclerView 没有监听事件,需要我们自己来写接口回调实现 这里具体就不写了
通过以上步骤 就见到 RecyclerView 实现的效果,此时你会发现 展示出来的没有分割线, 这也是需要我们自己手动去完成(示例没有实现)
这时候问题来了,我们常有的ListView ,适配也有那么多种, RecyclerView 的具体要怎么实现呢? 其实也不难,和ListView 大同小异。
1 自己建个adapter 继承RecyclerView adapter < 自己的ViewHolder >
2 重写 getItemCount(); 该方法返回数据源长度;
onCreateViewHolder() ; 初始化ViewHolder 引入item 布局 返回 view
onBindViewHolder () 主要是控件进行操作, 监听事件写在这里 类似于List View 的 getView()方法
3 在该适配器里 写我们的ViewHolder类继承 RecyclerView.ViewHolder类, 并在构造方法里初始化item 布局里控件。
下边看具体代码实现
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".ListActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout
activity
public class RecyclerActivity extends AppCompatActivity {
RecyclerView recyView;
List<Persen> persens = new ArrayList<>();
ListRecyViewAdapter listRecyViewAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
recyView = (RecyclerView) findViewById(R.id.recyView);
initData();
listRecyViewAdapter = new ListRecyViewAdapter(RecyclerActivity.this, persens);
//横向
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyView.setLayoutManager(layoutManager);
//纵向
//recyView.setLayoutManager(new LinearLayoutManager(this));
recyView.setAdapter(listRecyViewAdapter);
listRecyViewAdapter.setListViewClick(new ListRecyViewAdapter.ListViewClick() {
@Override
public void listItemClick(View view, int position) {
Toast.makeText(RecyclerActivity.this,"点击了"+position,Toast.LENGTH_LONG).show();
}
@Override
public void listItemLongClick(View view, int position) {
Toast.makeText(RecyclerActivity.this,"长按了"+position,Toast.LENGTH_LONG).show();
}
});
}
private void initData() {
for (int i = 0; i < 20; i++) {
Persen persen = new Persen();
persen.setHeight("身高是175cm");
persen.setName("小王");
persens.add(persen);
}
}
}
adapter
public class ListRecyViewAdapter extends RecyclerView.Adapter<ListRecyViewAdapter.MyViewHolder> {
List<Persen> persens;
Context context;
private ListViewClick listViewClick;
public void setListViewClick(ListViewClick listViewClick) {
this.listViewClick = listViewClick;
}
public ListRecyViewAdapter(Context context, List<Persen> persens) {
this.context = context;
this.persens = persens;
}
@Override
public int getItemCount() {
return persens.size();
}
//返回item的布局
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_listrecy, null));
return holder;
}
//对控件的操作
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.nameTV.setText(persens.get(position).getName());
holder.heightTV.setText(persens.get(position).getHeight());
//监听事件
if (listViewClick!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//自己定义变量是因为自己可以可以增加头和未 这里的点击位置保持
int pos = holder.getLayoutPosition();
listViewClick.listItemClick(holder.itemView, pos );
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int pos = holder.getLayoutPosition();
listViewClick.listItemLongClick(holder.itemView, pos );
return true;
}
});
}
}
//内部类初始化item 布局控件
class MyViewHolder extends RecyclerView.ViewHolder {
TextView nameTV, heightTV;
public MyViewHolder(View itemView) {
super(itemView);
nameTV = (TextView) itemView.findViewById(R.id.nameTV);
heightTV = (TextView) itemView.findViewById(R.id.heightTV);
}
}
public interface ListViewClick {
void listItemClick(View view, int position);
void listItemLongClick(View view, int position);
}
}
以上就是简单使用。