Easyrecyclerview 使用体验

来源:互联网 发布:数据接口的功能 编辑:程序博客网 时间:2024/06/04 01:14

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);    }


原创粉丝点击