RecyclerView互换位置

MainActivity

效果图

package com.example.recycleview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ViewAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取资源view
        recyclerView = findViewById(R.id.view);
        recyclerView.setHasFixedSize(true);
        //创建适配器
        mAdapter = new ViewAdapter(this);
        //布局管理器
        GridLayoutManager layout = new GridLayoutManager(this, 3);
        //item跨列显示
        layout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int i) {
                //是标题就需要跨3列
                return mAdapter.isTitle(i) ? 3 : 1;
            }
        });
        recyclerView.setLayoutManager(layout);

        mAdapter.setOnItemClickListener(new ViewAdapter.OnItemClickListener() {

            private ChannelBean removeBean;
            @Override
            public void onItemClick(View itemView, int position) {
                //移除
                removeBean = mAdapter.remvoeItem(position);
                removeBean.setSelected(!removeBean.isSelected());
                //添加
                mAdapter.addItem(removeBean);

            }
        });

        recyclerView.setAdapter(mAdapter);
        initData();
    }

    private void initData() {
        List<ChannelBean> yesDatas = new ArrayList<>();
        List<ChannelBean> noDatas = new ArrayList<>();

        yesDatas.add(new ChannelBean("关注1", true,false, true ));
        yesDatas.add(new ChannelBean("关注2", true,false, true ));
        yesDatas.add(new ChannelBean("关注3", true,false, false ));
        yesDatas.add(new ChannelBean("关注4", true,false, false ));
        yesDatas.add(new ChannelBean("关注5", true,false, false ));
        yesDatas.add(new ChannelBean("关注6", true,false, false ));
        yesDatas.add(new ChannelBean("关注7", true,false, false ));
        yesDatas.add(new ChannelBean("关注8", true,false, false ));
        yesDatas.add(new ChannelBean("关注9", true,false, false ));

        noDatas.add(new ChannelBean("未关注1",false, false, false));
        noDatas.add(new ChannelBean("未关注2",false, false, false));
        noDatas.add(new ChannelBean("未关注3",false, false, false));
        noDatas.add(new ChannelBean("未关注4",false, false, false));
        noDatas.add(new ChannelBean("未关注5",false, false, false));
        noDatas.add(new ChannelBean("未关注6",false, false, false));
        noDatas.add(new ChannelBean("未关注7",false, false, false));
        noDatas.add(new ChannelBean("未关注8",false, false, false));
        noDatas.add(new ChannelBean("未关注9",false, false, false));

        mAdapter.setChannelDatas(yesDatas, noDatas);
    }

}

ViewAdapter适配器

package com.example.recycleview;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.ViewHolder> {
    private List<ChannelBean> selectedChanner;
    private List<ChannelBean> normalChanner;
    private Context mContext;

    public ViewAdapter(Context mContext) {
        this.mContext = mContext;
        selectedChanner = new ArrayList<>();
        normalChanner = new ArrayList<>();
    }
    /定义一些判断方法--------
    //  当前position是否是选中的条目3
    public boolean isSelected(int position){
        return position <= selectedChanner.size();
    }
    //  当前条目 是否是标题
    public boolean isTitle(int position){
        return isSelTitle(position) || isNomTitle(position);
    }
    // 是否是选中的标题
    public boolean isSelTitle(int position){
        return position == 0;
    }
    //   是否是当前的普通标题
    public boolean isNomTitle(int position){
        return position == selectedChanner.size() + 1;
    }
    //多条目分类
    @Override
    public int getItemViewType(int position) {
       if (isTitle(position)){
           return R.layout.title_item;
       }
       if (isSelected(position)){
           return R.layout.yes_selected_item;
       }
           return R.layout.no_selected_item;
    }

    //条目类型
    public ChannelBean getItem(int position){
        if(isTitle(position)) {
            return null;
        }
        // 第一个选中频道列表的数据
        if (isSelected(position)) {
            return selectedChanner.get(position - 1);
        }
        //第二个未选中频道列表的数据
        return normalChanner.get(position - selectedChanner.size() - 2);
    }

    // 外部数据的设置
    public void setChannelDatas(List<ChannelBean> yesDatas, List<ChannelBean> noDatas) {
        this.selectedChanner = yesDatas;
        this.normalChanner = noDatas;
        notifyDataSetChanged();
    }

    //添加,删除的方法
    public ChannelBean remvoeItem(int position) {
        ChannelBean channelBean = null;
        if(isSelected(position)) {
            channelBean = selectedChanner.remove(position - 1);
        } else {
            channelBean = normalChanner.remove(position - selectedChanner.size() - 2);
        }
        notifyItemRemoved(position);
        //选中  - 1
        //未选中 - selsize - 2
        return channelBean;
    }

    public void addItem(ChannelBean item) {
        if(item.isSelected()) {
            //添加到选中频道的尾部
            selectedChanner.add(item);
            notifyItemInserted(selectedChanner.size());
        } else {
            //添加到未选中频道的头部
            normalChanner.add(0, item);
            notifyItemInserted(selectedChanner.size() + 2);
        }
    }

    @NonNull
    @Override
    public ViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (i == R.layout.title_item) {
            return new ViewHolder(LayoutInflater.from(mContext).inflate(i, viewGroup, false));
        } else {
            return new ViewHolder(LayoutInflater.from(mContext).inflate(i, viewGroup, false), listener);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull ViewAdapter.ViewHolder viewHolder, int i) {
         if (isSelTitle(i)){
             viewHolder.text.setText("我的频道");
             return;
         }
        if(isNomTitle(i)) {
            viewHolder.text.setText("频道推荐");
            return ;
        }
            viewHolder.text.setText(getItem(i).getName());

    }

    //总数需要加2个标题
    @Override
    public int getItemCount() {
        return selectedChanner.size() + normalChanner.size() + 2;
    }

    private OnItemClickListener listener;

    public ViewAdapter setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
        return this;
    }

    public interface OnItemClickListener {
        void onItemClick(View itemView, int position);
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView text;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.text);
        }

        public ViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
            this(itemView);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //getAdapterPosition()
                    if (listener == null) {
                        return;
                    }
                    listener.onItemClick(ViewHolder.this.itemView, getAdapterPosition());
                }
            });
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值