Recycleview的基本使用:
Recycleview和listview的功能差不多的,都用来加载列表,但是为啥还要引入Recycleview呢,原因是Recycleview能实现的功能比listview的强大很多,所以我们还是有必要学习一下它是如何使用的。
添加依赖:
compile 'com.android.support:recyclerview-v7:24.2.1'
布局:
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
代码:
-找到recycleview控件
-设置布局
-设置适配器adapter
rv.setLayoutManager(new LinearLayoutManager(getContext()));//设置布局管理器
HomeRvAdapter RvAdapter = new HomeRvAdapter(homeData);
//设置适配器
rv.setAdapter(RvAdapter);
关键代码就在适配器Adapter和适配器中要用到的ViewHolder
Adapter:
示例ViewHolder:在Adapter中的onCreateViewHolder()方法中初始化
public class RecomendHolder extends RecyclerView.ViewHolder {
@InjectView(R.id.tv_division_title)
TextView tvDivisionTitle;
@InjectViews({R.id.text1, R.id.text2, R.id.text3, R.id.text4, R.id.text5, R.id.text6})
public List<TextView> texts;
public RecomendHolder(View itemView) {
super(itemView);
int layoutId = R.layout.item_recomend;
ButterKnife.inject(this, itemView);
}
}
注意:
recycleview的优化和listview的优化是一样的,只是历史缓存对象的复用被封装了,值剩下ViewHolder我们能够看到。
recycleview不能向listview那样直接添加头部和尾部,所以需要根据不同位置显示的类别来显示不同布局。
框架-BaseRecyclerViewAdapterHelper
在这里介绍一个专门用于编写recycleview中Adapter的代码的框架,可以减少70%代码量。里面封装了很多东西,添加列表加载动画,添加头部尾部,添加分组,自定义不同item类型等等的都能轻松搞定。
gitbub地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
demo演示:
在这里简单的写一下框架的基本使用:
1.添加依赖:
先在 build.gradle(Project:XXXX) 的 repositories 添加:
allprojects {
repositories {
jcenter()
}
repositories {
maven { url "https://jitpack.io" }
}
}
然后在 build.gradle(Module:app) 的 dependencies 添加:
//compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE'//这里的VERSION_CODE要写该框架真实发行的版本号
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.3'
activity代码:
public class MainActivity extends AppCompatActivity {
@InjectView(R.id.rv)
RecyclerView rv;
public List<String> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
//设置recycleview的布局
rv.setLayoutManager(new LinearLayoutManager(this));
items = new ArrayList<>();
for (int i = 0; i < 20; i++) {
items.add("---商家" + i);
}
MyAdapter adapter = new MyAdapter(items);
rv.setAdapter(adapter);
}
/**
* recycleview的适配器
*第一个泛型是数据类型,第二个泛型是Viewholder
*/
public class MyAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
public MyAdapter(List<String> data) {
//注意:布局需要自己手动设置,忘记设置布局会报出错误
super(R.layout.item_outteradapter, data);
}
@Override
protected void convert(final BaseViewHolder holder, String item) {
// TextView textView = helper.getView(R.id.tv_outter_adapter_text);
// textView.setText(item);
//可以将将值直接设置给tv_outter_adapter_text控件,原理请自行阅读源代码
holder.setText(R.id.tv_outter_adapter_text, item)
.setTextColor(R.id.tv_outter_adapter_text, Color.RED);
//给条目设置点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "点击了" + holder.getLayoutPosition(), Toast.LENGTH_SHORT).show();
}
});
}
}
}