两步实现RecycleView拖动,新闻类别定制
来源:互联网 发布:淘宝上的手机靠谱吗 编辑:程序博客网 时间:2024/05/24 08:34
1,activity,里面有一些项目的东西,用不到的直接删哈。
import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.helper.ItemTouchHelper;import android.util.Log;import android.view.View;import android.widget.TextView;import com.zongsi.mikeli.funday.R;import com.zongsi.mikeli.funday.adapter.TitleAdapter;import com.zongsi.mikeli.funday.database.TitleDatabase;import com.zongsi.mikeli.funday.util.ChangeList;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class TitleActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "ttt"; private RecyclerView mRecycleView; private TextView mTitleBack; private TextView mTitleGo; private TitleAdapter mAdapter; private List<String> mList = new ArrayList<>(); private ChangeList<String> mSelect = new ChangeList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_title); initView(); initListener(); initData(); initAdapter(); //1.为recycleview绑定拖拽事件 helper.attachToRecyclerView(mRecycleView); } private void initListener() { mSelect.setChangerListener(new ChangeList.ChangerListener() { @Override public void onChanger() { Log.i(TAG, "onChanger: list"+mSelect.size()); if(mSelect.size()==0){ mTitleGo.setText("随便看看"); }else { mTitleGo.setText("开始聚焦"); } } }); } private void initData() { mList.add("推荐"); mList.add("游戏"); mList.add("小说"); mList.add("漫画"); mList.add("音乐"); mList.add("电影"); mList.add("视频"); mList.add("电竞"); mList.add("二次元"); mList.add("Cosplay"); mList.add("王者荣耀"); mList.add("体育"); mList.add("时尚"); } private void initAdapter() { GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 12); //这个确定每个item所占的空间,两个字就占3个位置,否者占4个。个人需求定义。如果都是一样,可不要该方法。 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if(mList.get(position).length() ==2){ return 3; } return 4; } }); mRecycleView.setLayoutManager(gridLayoutManager); mAdapter = new TitleAdapter(this,mList,mSelect); mRecycleView.setAdapter(mAdapter); } private void initView() { mRecycleView = (RecyclerView) findViewById(R.id.title_recycle_view); mTitleBack = (TextView) findViewById(R.id.title_back); mTitleGo = (TextView) findViewById(R.id.title_go); mTitleBack.setOnClickListener(this); mTitleGo.setOnClickListener(this); } @Override public void onClick(View view) { switch(view.getId()){ case R.id.title_back: startActivity(new Intent(this,FirstActivity.class)); finish(); break; case R.id.title_go: getSharedPreferences("funDayFirst",MODE_PRIVATE).edit().putBoolean("second",true).apply(); mAdapter.notifyItemRangeChanged(0,mList.size()); Log.i(TAG, "onClick: "+mList.toString()); TitleDatabase titleDatabase = new TitleDatabase(this); titleDatabase.addBySql(mList); List<String> save = new ArrayList<>(); mSelect.add(0,mList.get(0)); for (int i = 0; i < mList.size(); i++) { if(mSelect.contains(mList.get(i))){ save.add(mList.get(i)); } } titleDatabase.addSelectBySql(save); startActivity(new Intent(this,MainActivity.class)); finish(); break; } } //2.为RecycleView绑定触摸事件,这个是拖拽的核心。 ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.Callback() { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { //首先回调的方法 返回int表示是否监听该方向 int dragFlags = ItemTouchHelper.UP|ItemTouchHelper.DOWN|ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;//拖拽 int swipeFlags = 0;//侧滑删除 return makeMovementFlags(dragFlags,swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //滑动事件 int start = viewHolder.getAdapterPosition(); int end = target.getAdapterPosition(); //判断,第一个不会进行拖拽。如果想全部都能动,去掉该判断即可 if(start!=0&&end!=0){ Collections.swap(mList,start,end); mAdapter.notifyItemMoved(viewHolder.getAdapterPosition(),target.getAdapterPosition()); Log.i(TAG, "onMove: "+start+" "+end); //swip方法会让数据源list乱掉,这个是对数据排序 if(start < end){ for (;start+1 < end; start++) { String temp = mList.get(start); mList.set(start,mList.get(start+1)); mList.set(start+1,temp); } } else { for (; start-1>end; start--) { String temp = mList.get(start); mList.set(start,mList.get(start-1)); mList.set(start-1,temp); } } } Log.i(TAG, "onMove: "+mList.toString()); return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { } @Override public boolean isLongPressDragEnabled() { //是否可拖拽 return true; } });}2.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.Button;import com.zongsi.mikeli.funday.R;import com.zongsi.mikeli.funday.database.TitleDatabase;import com.zongsi.mikeli.funday.util.ChangeList;import java.util.List;/** * Created by mike.li on 2017/4/18. * Email:mike.li@coolpad.com */public class TitleAdapter extends RecyclerView.Adapter<TitleAdapter.TitleViewHolder> { private static final String TAG = "ttt"; private Context mContext; private List<String> mList; private ChangeList<String> mSelect; public TitleAdapter(Context mContext, List<String> mList, ChangeList<String> mSelect) { this.mContext = mContext; this.mList = mList; this.mSelect = mSelect; mSelect.addAll(new TitleDatabase(mContext).getSelectAllData()); } @Override public TitleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new TitleViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_title, parent, false)); } @Override public void onBindViewHolder(final TitleViewHolder holder, final int position) { holder.titleItemText.setText(mList.get(position)); if(position==0){ holder.titleItemText.setBackgroundColor(mContext.getColor(R.color.colorAccent)); }else { if(mSelect.contains(mList.get(position))){ holder.titleItemText.setBackgroundColor(mContext.getColor(R.color.colorSelect)); }else { holder.titleItemText.setBackgroundColor(mContext.getColor(R.color.colorUnselect)); } } holder.titleItemText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mSelect.contains(mList.get(position))){ mSelect.remove(mList.get(position)); holder.titleItemText.setBackgroundColor(mContext.getColor(R.color.colorUnselect)); }else { mSelect.add(mList.get(position)); holder.titleItemText.setBackgroundColor(mContext.getColor(R.color.colorSelect)); } } }); holder.rootView.setTag(position); } @Override public int getItemCount() { return mList.size(); } class TitleViewHolder extends RecyclerView.ViewHolder { private View rootView; private Button titleItemText; private TitleViewHolder(View itemView) { super(itemView); this.rootView = itemView; this.titleItemText = (Button) rootView.findViewById(R.id.title_item_text); } }}
3.说明一下,两个gridView之间实现的互动。
其实在上面我们已经实现了,我们只需要让比如中间那个item占的空间是一整行,并且让这个不能触摸,不能交换。这样就实现两块的隔离了。
这也是我看腾讯,阿里的布局受到的启发。大家可以试试,以后我用到再给大家贴代码。
0 0
- 两步实现RecycleView拖动,新闻类别定制
- Yahoo新闻,JobService,RecycleView拖动排序
- RecycleView实现侧滑和拖动
- RecycleView实现侧滑和拖动
- Android实现腾讯新闻的新闻类别导航效果
- RecycleView 仿支付宝实现item拖动效果
- 实现用户管理模块和新闻类别管理模块
- 实现用户管理模块和新闻类别管理模块
- 实现窗体拖动的两种方法
- 两步实现Youtube网站视频下载
- recycleView滑动删除,拖动排序
- recycleView滑动删除,拖动排序
- 实现TreeSet定制排序两种方式
- 优雅地实现RecycleView的点击、拖动、和侧滑删除
- 牛腩新闻发布系统笔记7:类别表操作类的实现
- C#2005实现两窗体之间BUTTON拖动[转]
- c# 实现Label拖动的两种方法
- c# 实现Label拖动的两种方法
- 架构漫谈(三):如何做好架构之识别问题
- Python入门:认识变量和字符串
- 高通batterydata电池曲线数据学习
- django QQ认证登录
- Bash Shell 学习记录(一)
- 两步实现RecycleView拖动,新闻类别定制
- win7上安装sqlserver2012的正确打开方式
- 关于hibernate的详解,从搭建环境到客户管理系统第一
- Java开发中的23种设计模式详解
- HAWQ技术解析(十八) —— 问题排查
- 如何用git将项目代码上传到github
- 法线贴图原理
- Maven+SSM框架实现简单的增删改查
- python cookbook 3rd