GIT地址
将开发中常用的RecyclerView的各种需求封装进库。提升开发效率。
重点在Adapter与viewholder的封装。他们之间彻底解耦。
adapter工作更少,仅负责业务逻辑。所以如果你使用mvp架构可以放进presenter层。
viewholder负责View展示与Adapter没有任何耦合,将可以到处复用。并不会影响运行效率。
并且adapter支持数据管理,Header与Footer添加,加载更多。没有更多。加载错误
使用了部分Malinskiy/SuperRecyclerView的代码,将更多功能交给了adapter实现。
app/build.gradle
compile 'com.jude:easyrecyclerview:4.4.2'
xml
<com.jude.easyrecyclerview.EasyRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/rl_login_head"
android:scrollbarStyle="insideOverlay"
app:layout_empty="@layout/layout_view_empty"
>
</com.jude.easyrecyclerview.EasyRecyclerView>
PhoneAttrActivity.java
package com.seatel.mobilehall.activity;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.jude.easyrecyclerview.EasyRecyclerView;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
import com.jude.easyrecyclerview.decoration.DividerDecoration;
import com.jude.easyrecyclerview.decoration.StickyHeaderDecoration;
import com.seatel.mobilehall.R;
import com.seatel.mobilehall.adapter.PhoneAttrAdapter;
import com.seatel.mobilehall.adapter.StickyHeaderAdapter;
import com.seatel.mobilehall.base.BaseActivity;
import com.seatel.mobilehall.bean.PhoneAttrBean;
import com.seatel.mobilehall.util.SysTools;
import java.util.ArrayList;
public class PhoneAttrActivity extends BaseActivity {
private EasyRecyclerView recyclerView;
private PhoneAttrAdapter adapter;
private ArrayList<PhoneAttrBean> mData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_attr);
initData();
initView();
}
private void initData() {
mData = new ArrayList<>();
mData.add(new PhoneAttrBean("柬埔寨","+855"));
mData.add(new PhoneAttrBean("中国大陆","+86"));
mData.add(new PhoneAttrBean("中国香港","+852"));
mData.add(new PhoneAttrBean("中国澳门","+853"));
mData.add(new PhoneAttrBean("中国台湾","+886"));
mData.add(new PhoneAttrBean("柬埔寨","+855"));
mData.add(new PhoneAttrBean("中国大陆","+86"));
mData.add(new PhoneAttrBean("中国香港","+852"));
mData.add(new PhoneAttrBean("中国澳门","+853"));
mData.add(new PhoneAttrBean("中国台湾","+886"));
mData.add(new PhoneAttrBean("柬埔寨","+855"));
mData.add(new PhoneAttrBean("中国大陆","+86"));
mData.add(new PhoneAttrBean("中国香港","+852"));
mData.add(new PhoneAttrBean("中国澳门","+853"));
mData.add(new PhoneAttrBean("中国台湾","+886"));
mData.add(new PhoneAttrBean("柬埔寨","+855"));
mData.add(new PhoneAttrBean("中国大陆","+86"));
mData.add(new PhoneAttrBean("中国香港","+852"));
mData.add(new PhoneAttrBean("中国澳门","+853"));
mData.add(new PhoneAttrBean("中国台湾","+886"));
mData.add(new PhoneAttrBean("柬埔寨","+855"));
mData.add(new PhoneAttrBean("中国大陆","+86"));
mData.add(new PhoneAttrBean("中国香港","+852"));
}
private void initView() {
recyclerView = (EasyRecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
DividerDecoration itemDecoration = new DividerDecoration(Color.LTGRAY, SysTools.dip2px(this, 0.5f), 0, 0);
itemDecoration.setDrawLastItem(false);
recyclerView.addItemDecoration(itemDecoration);
adapter = new PhoneAttrAdapter(this);
recyclerView.setAdapter(adapter);
adapter.addAll(mData);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
// StickyHeader
StickyHeaderDecoration decoration = new StickyHeaderDecoration(new StickyHeaderAdapter(this));
decoration.setIncludeHeader(false);
recyclerView.addItemDecoration(decoration);
findViewById(R.id.login_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
PhoneAttrAdapter.java
package com.seatel.mobilehall.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.jude.easyrecyclerview.adapter.BaseViewHolder;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
import com.seatel.mobilehall.R;
import com.seatel.mobilehall.bean.PhoneAttrBean;
/**
* Created by ylh on 2017/11/14 0014.
*/
public class PhoneAttrAdapter extends RecyclerArrayAdapter<PhoneAttrBean>{
public PhoneAttrAdapter(Context context) {
super(context);
}
@Override
public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHodler(parent);
}
public static class MyViewHodler extends BaseViewHolder<PhoneAttrBean>{
TextView mTv;
TextView mTvRight;
public MyViewHodler(ViewGroup parent) {
super(parent,R.layout.view_rv_attr_item);
mTv = $(R.id.item_tv);
mTvRight = $(R.id.item_tv_right);
}
@Override
public void setData(PhoneAttrBean data) {
super.setData(data);
mTv.setText(data.getLocation());
mTvRight.setText(data.getPhone());
}
}
}
StickyHeaderAdapter.java
package com.seatel.mobilehall.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.jude.easyrecyclerview.decoration.StickyHeaderDecoration;
import com.seatel.mobilehall.R;
/**
* Created by ylh on 2017/11/14 0014.
*/
public class StickyHeaderAdapter implements StickyHeaderDecoration.IStickyHeaderAdapter<StickyHeaderAdapter.HeaderHolder> {
private LayoutInflater mInflater;
public StickyHeaderAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
@Override
public long getHeaderId(int position) {
return position>4?1:0;
}
@Override
public HeaderHolder onCreateHeaderViewHolder(ViewGroup parent) {
final View view = mInflater.inflate(R.layout.header_item, parent, false);
return new HeaderHolder(view);
}
@Override
public void onBindHeaderViewHolder(HeaderHolder viewholder, int position) {
if (getHeaderId(position) == 0) {
viewholder.header.setText("常用");
} else {
viewholder.header.setText("国家");
}
}
class HeaderHolder extends RecyclerView.ViewHolder {
public TextView header;
public HeaderHolder(View itemView) {
super(itemView);
header = (TextView) itemView.findViewById(R.id.item_tv);
}
}
}
效果图
上拉刷新:
recyclerView.setRefreshListener(this);
@Override
public void onRefresh() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
adapter.clear();
adapter.addAll(mData);
}
},1000);
}