RecyclerView的Item点击事件,增加删除Item瀑布流动画效果,长按拖动Item,RecyclerView复杂布局、实现新闻频道选择器

RecyclerView的Item点击事件的实现,增加和删除Item使用瀑布流动画效果,长按拖动ItemRecyclerView复杂布局的实现使用、RecyclerView去实现今日头条新闻频道选择器
使用ItemTouchHelper实现Item的拖动交换,由于RecyclerView本身没有自带的Item点击事件所以我们仿照ListView的Item点击事件利用RecyclerView自带findChildViewUnder方法的自己实现点击效果。
首先我们来看一下demo的运行效果:

demo源码下载连接:(http://download.csdn.net/detail/qq_30000411/9700050)

接下来是我们代码的实现,(注:本demo拖动事件的实现为不同类型的Item之间不能进行拖动)。

RecyclerView的适配器的实现扩展Item自定义的交换的接口并且重写交换方法,每个Item布局建立不同的ViewHolder,利用GridLayoutManager来实现每一个Item应该怎样放置(传入每个类型的公倍数)。
复杂布局不用类型的Item每行多少列的代码如下:

 GridLayoutManager gridLayoutManager = new
                GridLayoutManager(this.getApplicationContext(),4);
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                AddPinDao addPinDao = addPinDaos.get(position);
                if (addPinDao.getTag() == 0 || addPinDao.getTag() == 2){
                    return 4;
                }else {
                    return 1;
                }
            }
        });

适配器的代码如下:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Collections;
import java.util.List;

/**
 * 适配器添加频道的recyclerview 的适配器
 * Created by lwp940118 on 2016/11/28.
 */
public class RecyclerView_Add_Adapter extends RecyclerView.Adapter implements
        RecyclerViewAddItemCallBackListener{
   

    private int tag = 0;
    private List<AddPinDao> addPinDaos;
    private Context context;

    public RecyclerView_Add_Adapter(List<AddPinDao> addPinDaos,Context context){
        super();
        this.addPinDaos = addPinDaos;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder viewHolder = null;
        switch (viewType){
            case 0:
                view = LayoutInflater.from(context).inflate(R.layout.recyclerview_add_item_one
                        ,parent,false);
                viewHolder = new ViewHolderOne(view);
                break;
            case 1:
                view = LayoutInflater.from(context).inflate(R.layout.recyclerview_add_item_my
                        ,parent,false);
                viewHolder = new ViewHolderMy(view);
                break;
            case 2:
                view = LayoutInflater.from(context).inflate(R.layout.recyclerview_add_item_tow
                        ,parent,false);
                viewHolder = new ViewHolderTow(view);
                break;
            case 3:
                view = LayoutInflater.from(context).inflate(R.layout.recyclerview_add_item_pindao
                        ,parent,false);
                viewHolder = new ViewHolderPinDao(view);
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        AddPinDao addPinDao = addPinDaos.get(position);
        switch (getItemViewType(position)){
            case 0:
                final ViewHolderOne viewHolderOne = (ViewHolderOne)holder;
                viewHolderOne.textView_one.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (tag == 0) {
                            viewHolderOne.textView_one.setText("完 成");
                            viewHolderOne.textView_tuodong.setText("拖动可以排序");
                            tag = 1;
                            Log.e("----t2",""+tag);
                            for (int i = 0;i < addPinDaos.size();i++){
                                if (addPinDaos.get(i).getTag() == 1){
                                    addPinDaos.get(i).setMyTag(1);
                                }
                            }
                            notifyDataSetChanged();
                        }else {
                            viewHolderOne.textView_one.setText("编 辑");
                            viewHolderOne.textView_tuodong.setText("");
                            tag = 0;
                            Log.e("----t1",""+tag);
                            for (int i = 0;i < addPinDaos.size();i++){
                                if (addPinDaos.get(i).getTag() == 1){
                                    addPinDaos.get(i).setMyTag(0);
                                }
                            }
                            notifyDataSetChanged();
                        }
                    }
                });
                break;
            case 1:
                final ViewHolderMy viewHolderMy = (ViewHolderMy)holder;
                viewHolderMy.textView_my.setText(addPinDao.getMessage());
                if (addPinDao.getMyTag() == 1) {
                    viewHolderMy.imageView_my.setVisibility(View.VISIBLE);
                }else {
                    viewHolderMy.imageView_my.setVisibility(View.INVISIBLE);
                }
                break;
            case 2:
                final ViewHolderTow viewHolderTow = (ViewHolderTow)holder;
                break;
            case 3:
                final ViewHolderPinDao viewHolderPinDao = (ViewHolderPinDao)holder;
                viewHolderPinDao.textView_pin.setText(addPinDao.getMessage());
                break;
        }
    }

    @Override
    <
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值