RecycleView

RecycleView的使用

参考网上资料 做了一个DEMO
不得不说 这recycleView用起来真麻烦。

可以添加头布局 和 脚布局,带有点击效果的RecycleView。

RecycleViewActivity中的mData 和 RecycleAdapter 中的 mData数据互通,改变其中一个 另一个页面的数据也会改变。增加数据的时候 带有动画效果

可以点击整个item 也可以点击 item中间的字母

这里写图片描述

public class RecycleViewActivity extends Activity implements RecycleAdapter.OnRecyclerViewItemClickListener, View.OnClickListener {

    private WarpRecycleView recyclerView;
    private List<String> mData;
    private RecycleAdapter adapter;
    private View headView;
    private ImageView header;
    private Button addDatasData1;
    private Button addDatasData2;
    private Button addDatasData3;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_recycle);

        initView();
        initData();
        initListener();
    }

    private void initView() {
        recyclerView = (WarpRecycleView) findViewById(R.id.recycleView);
        addDatasData1 = (Button) findViewById(R.id.addDatasData1);
        addDatasData2 = (Button) findViewById(R.id.addDatasData2);
        addDatasData3 = (Button) findViewById(R.id.addDatasData3);

        headView = View.inflate(this, R.layout.headview,null);
        RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,300);
        headView.setLayoutParams(params);
    }

    private void initData() {
        mData = new ArrayList<String>();
        for(int i='A'; i<='Z'; i++){
            mData.add(String.valueOf((char)i));
        }

        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        recyclerView.addHeadView(headView);

        adapter = new RecycleAdapter(this,mData);
        recyclerView.setAdapter(adapter);


    }

    private void initListener() {
        adapter.setOnItemClickListener(this);
        addDatasData1.setOnClickListener(this);
        addDatasData2.setOnClickListener(this);
        addDatasData3.setOnClickListener(this);
    }


    @Override
    public void onItemClick(View view, int position, int type) {
        if(type == 0){
            Toast.makeText(RecycleViewActivity.this,"点击了整个item",Toast.LENGTH_SHORT).show();
        }else if(type == 1){
            Toast.makeText(RecycleViewActivity.this,mData.get(position),Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onClick(View v) {
        if(v == addDatasData1){
            mData.add(0, "1");
            adapter.addDataHead();
            recyclerView.scrollToPosition(0);
        }else if(v == addDatasData2){
            mData.add(mData.size(), "1");
            adapter.addDataFoot();
            recyclerView.scrollToPosition(mData.size()-1);
        }else if(v == addDatasData3){
            adapter.moveData();
        }
    }
}
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.RecycleViewHolder> {

    private Context context;
    private List<String> mData;
    private LayoutInflater mLayoutInflater;


    private OnRecyclerViewItemClickListener mOnItemClickListener = null;

    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    /**
     * type==0  点击整个item
     * type==1  点击英文字母
     */
    public interface OnRecyclerViewItemClickListener {
        void onItemClick(View view , int position,int type);
    }

    public RecycleAdapter(Context context, List<String> mData){
        this.context = context;
        this.mData = mData;
        mLayoutInflater = LayoutInflater.from(context);
    }

    public void notifyData(List<String> mData){
//        this.mData = mData;
//        this.mData.add(0, "1");
//        notifyItemChanged(1);
        mData.addAll(mData);
        notifyItemInserted(mData.size()-5);
    }

    public void addDataHead(){
        notifyItemInserted(0);
    }

    public void addDataFoot(){
        notifyItemInserted(mData.size());
    }

    public void moveData(){
        notifyItemMoved(1,2);
    }

    @Override
    public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = mLayoutInflater.inflate(R.layout.base_item,parent,false);

        return new RecycleViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecycleViewHolder holder, int position) {
        holder.itemtv.setText(mData.get(position));
    }

    @Override
    public int getItemCount() {
        if(mData==null)return 0;
        return mData.size();
    }

    class RecycleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView itemtv;

        public RecycleViewHolder(View itemView) {
            super(itemView);
            itemtv = (TextView) itemView.findViewById(R.id.tv_item);
            itemView.setOnClickListener(this);
            itemtv.setOnClickListener(this);
        }

        // getPosition()  是ViewHolder内置方法
        @Override
        public void onClick(View v) {
            if(v == itemtv){
                mOnItemClickListener.onItemClick(v,getPosition(),1);
            }else if(v == itemView){
                mOnItemClickListener.onItemClick(v,getPosition(),0);
            }
        }
    }
}
public class WarpRecycleView extends RecyclerView {

    private Adapter mAdapter;
    private ArrayList<View> mHeaderViewInfos = new ArrayList<View>();
    private ArrayList<View> mFooterViewInfos = new ArrayList<View>();


    public WarpRecycleView(Context context) {
        super(context);
    }

    /**
     * XML文件中使用s
     * @param context
     * @param attrs
     */
    public WarpRecycleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public WarpRecycleView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }


    public void setAdapter(Adapter mAdapter){

        if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) {
            mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, mAdapter);
            super.setAdapter(mAdapter);
        } else {
            super.setAdapter(mAdapter);
        }
        this.mAdapter = mAdapter;
    }

    /**
     * 添加头布局
     * @param headView
     */
    public void addHeadView(View headView){

        mHeaderViewInfos.add(headView);
        // 重新装饰mAdapter
        if(mAdapter !=null){
            if(!(mAdapter instanceof HeaderViewListAdapter)){
                mAdapter = new HeaderViewListAdapter(mHeaderViewInfos,mFooterViewInfos,mAdapter);
            }
        }
    }

    /**
     * 添加脚布局
     * @param footView
     */
    public void addFootView(View footView){
        mFooterViewInfos.add(footView);

        // 重新装饰mAdapter
        if(mAdapter !=null){
            if(!(mAdapter instanceof  HeaderViewListAdapter)){
                mAdapter = new HeaderViewListAdapter(mHeaderViewInfos,mFooterViewInfos,mAdapter);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值