MainActivity
![效果图](https://i-blog.csdnimg.cn/blog_migrate/78a957c125d1d1ac90140bf3269ae925.png)
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());
}
});
}
}
}