多选反选单选
来源:互联网 发布:mac 备份系统 编辑:程序博客网 时间:2024/05/13 23:32
listview/gridview 好像有个 setChoiceMode
自己之前做需求中,用了一种recyclerview 多选的问题
avtivity代码:
package com.cinread.glance.ui;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.helper.ItemTouchHelper;import android.view.View;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.cinread.glance.R;import com.cinread.glance.adapter.DetailDataAdapter;import com.cinread.glance.base.UIUtils;import com.cinread.glance.bean.DetailInfo;import com.cinread.glance.helper.SimpleItemTouchHelperCallback;import com.cinread.glance.utils.Constants;import com.cinread.glance.utils.FileUtils;import com.cinread.glance.utils.SPUtils;import com.cinread.glance.view.NoScrollRrecyclerView;import com.lidroid.xutils.DbUtils;import com.lidroid.xutils.db.sqlite.Selector;import com.lidroid.xutils.exception.DbException;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * @project:glance * @package:com.cinread.glance.ui * @author:pengjf * @update:2016/5/7 * @desc: TODO */// Created by pengjf on 2016/5/7.public class DetailDataActivity extends Activity implements View.OnClickListener { private int mCur = 0; private TextView mTvPages; private RelativeLayout mTopBar; private ImageView mIvDes; //left private ImageView mIvInc; //right //private CheckBox checkbox; private TextView mBtnOk; private List<DetailInfo> mDatas; //public static final String[] str = new String[]{FileUtils.getSdPath() + "/File/PNGFiles/", FileUtils.getSdPath() + "/Note/NoteDir/"/*, FileUtils.getSdPath() + "/comic/"*/}; private DbUtils db = UIUtils.getDb(); private AsyncTask<Void, Void, Void> mAsyncTask; private DetailDataAdapter mAdapter; private NoScrollRrecyclerView recyclerView; private ItemTouchHelper mItemTouchHelper; private boolean isChange = false; private HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); } @Override protected void onStart() { super.onStart(); init(); initView(); initData(); initEvent(); } private void initView() { mTopBar = (RelativeLayout) findViewById(R.id.jmall_top_bar); mBtnOk = (TextView) findViewById(R.id.btn_ok); mTvPages = (TextView) findViewById(R.id.tabstrip_tv_pages); mIvDes = (ImageView) findViewById(R.id.tabstrip_iv_pagedes); mIvInc = (ImageView) findViewById(R.id.tabstrip_iv_pageinc); //checkbox = (CheckBox) findViewById(R.id.detail_iv_check); recyclerView = (NoScrollRrecyclerView) findViewById(R.id.recyclerview); } private void init() { //所有文件 遍历查询并显示 mAsyncTask = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... voids) { findAllFile(FileUtils.getSdPath()); List<DetailInfo> all = null; try { all = db.findAll(Selector.from(DetailInfo.class)); //select * from tb_note group by dirname order by opentime desc; } catch (DbException e) { e.printStackTrace(); } if (all != null) { mDatas = all; } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); initData(); mTvPages.setText(String.format("%d - %d / %d", 1, 6, mDatas == null ? 0 : mDatas.size())); } }; mAsyncTask.execute(); } private void findAllFile(String path) { File file = new File(path); File files[] = file.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { String fileName = files[i].getName(); if (files[i].isDirectory() && files[i].listFiles().length > 0) { findAllFile(files[i].getAbsolutePath()); } else { boolean isPdf = fileName.toLowerCase().endsWith(".pdf"); boolean isEpub = fileName.toLowerCase().endsWith(".epub"); if (isPdf || isEpub) { try { DetailInfo di = new DetailInfo(); di.setFilename(fileName); di.setFilepath(files[i].getAbsolutePath()); di.setIsCheck(SPUtils.getBoolean(DetailDataActivity.this, "check" + fileName, false)); db.replace(di); } catch (DbException e) { e.printStackTrace(); } } } } } } private void initData() { mAdapter = new DetailDataAdapter(this, mDatas); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(mAdapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(mAdapter); mItemTouchHelper = new ItemTouchHelper(callback); mItemTouchHelper.attachToRecyclerView(recyclerView); } private void initEvent() { mTopBar.setOnClickListener(this); mBtnOk.setOnClickListener(this); mIvDes.setOnClickListener(this); mIvInc.setOnClickListener(this); checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mBtnOk.setVisibility(View.VISIBLE); try { int count = 0; for (int i = 0, p = mDatas.size(); i < p; i++) { if (isChecked) { map.put(i, true); count++; } else { if (!isChange) { map.put(i, false); count = 0; } else { map = mAdapter.getMap(); count = map.size(); } } } mAdapter.setMap(map); } catch (Exception e) { e.printStackTrace(); } } }); } @Override public void onClick(View v) { if (v == mIvDes) { mCur--; if (mCur <= 0) { mCur = 0; } recyclerView.scrollToPosition(mCur * 6); mTvPages.setText(String.format("%d - %d / %d", (mCur + 1) * 6 - 5, (mCur + 1) * 6, mDatas.size())); } else if (v == mIvInc) { mCur++; if ((mCur + 1) * 6 >= mDatas.size()) { mCur = mDatas.size() / 6; } recyclerView.scrollToPosition(mCur * 6 + 1); mTvPages.setText(String.format("%d - %d / %d", (mCur + 1) * 6 - 5, (mCur + 1) * 6, mDatas.size())); } else if (v == mBtnOk) { ArrayList<String> string = new ArrayList<String>(); if (mBtnOk.isShown()) { for (int i = 0; i < mDatas.size(); i++) { if (map != null && map.size() > 0) { if (map.get(i)) { string.add(mDatas.get(i).getFilepath()); } } } //write to file FileWriter fw = null; try { File file = new File(UIUtils.getAppFile() + Constants.SETPATH); if (!file.exists()) { file.createNewFile(); } fw = new FileWriter(file); fw.write(""); //写入 fw.write(SPUtils.getInt(DetailDataActivity.this, "play_duration", 10 * 60 * 1000) + "\n"); fw.write(SPUtils.getInt(DetailDataActivity.this, "play_mode", 0) + "\n"); fw.write(SPUtils.getInt(DetailDataActivity.this, "low_power", 10 * 60 * 1000) + "\n"); //fw.write(mFilePath + "\n"); fw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { FileUtils.close(fw); } if (string.size() <= 0) { Toast.makeText(DetailDataActivity.this, "设置失败,请至少选择一项", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(DetailDataActivity.this, "设置成功", Toast.LENGTH_SHORT).show(); finish(); } } } else if (v == mTopBar) { recyclerView.scrollToPosition(0); } } @Override protected void onResume() { super.onResume(); init(); }}
adapter代码:
package com.cinread.glance.adapter;import android.content.Context;import android.graphics.Color;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.cinread.glance.R;import com.cinread.glance.bean.DetailInfo;import com.cinread.glance.helper.ItemTouchHelperAdapter;import com.cinread.glance.helper.ItemTouchHelperViewHolder;import com.lidroid.xutils.BitmapUtils;import java.util.Collections;import java.util.HashMap;import java.util.List;/** * @project:Rss * @package:com.cinread.rss * @author:pengjf * @update:2016/4/9 * @desc: TODO */// Created by pengjf on 2016/4/9.public class DetailDataAdapter extends RecyclerView.Adapter<DetailDataAdapter.ItemViewHolder> implements ItemTouchHelperAdapter { private List<DetailInfo> mItems; private Context mContext; public HashMap<Integer, Boolean> map; public DetailDataAdapter(Context context, List<DetailInfo> data) { this.mContext = context; this.mItems = data; map = new HashMap<Integer, Boolean>(); init(); } private void init() { if (null == mItems || mItems.size() <= 0) { return; } for (int i = 0, p = mItems.size(); i < p; i++) { map.put(i, false); } } @Override public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_detail, parent, false); ItemViewHolder itemViewHolder = new ItemViewHolder(view); return itemViewHolder; } @Override public void onBindViewHolder(final ItemViewHolder holder, final int position) { if (null == mItems || mItems.size() <= 0) { return; } holder.tvName.setText(mItems.get(position).getFilename()); BitmapUtils u = new BitmapUtils(mContext); u.display(holder.ivImage, mItems.get(position).getFilepath()); holder.ivCheck.setTag(new Integer(position));//设置tag 否则划回来时选中消失 if (map != null) { holder.ivCheck.setChecked((map.get(position))); } else { holder.ivCheck.setChecked(false); } holder.ivCheck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int mFlags = (Integer) view.getTag(); if (map != null) { if (map.get(position)) { map.put(position, false); } else { map.put(mFlags, Boolean.TRUE); } } } }); } @Override public int getItemCount() { return mItems == null ? 0 : mItems.size(); } @Override public void onItemDismiss(int position) { mItems.remove(position); notifyItemRemoved(position); } @Override public boolean onItemMove(int fromPosition, int toPosition) { Collections.swap(mItems, fromPosition, toPosition); notifyItemMoved(fromPosition, toPosition); return true; } /** * Simple example of a view holder that implements {@link ItemTouchHelperViewHolder} and has a * "handle" view that initiates a drag event when touched. */ public static class ItemViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder { public TextView tvName; public CheckBox ivCheck; public ImageView ivImage; public ItemViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.tv_name); ivImage = (ImageView) itemView.findViewById(R.id.iv_image); ivCheck = (CheckBox) itemView.findViewById(R.id.iv_check); } @Override public void onItemSelected() { itemView.setBackgroundColor(Color.LTGRAY); } @Override public void onItemClear() { itemView.setBackgroundColor(0); } } public HashMap<Integer, Boolean> getMap() { return map; } public void setMap(HashMap<Integer, Boolean> map) { this.map = map; notifyDataSetChanged(); }}
0 0
- 多选反选单选
- iOS 自定义多选单选控件
- gridview多选单选的实现
- 同一个tableview实现多选单选删除
- ListView的多选单选模式
- listview中checkbox多选单选删除
- tab 界面展示多选单选过滤条件组成
- vue之table表格的增删改查,多选框的多选单选
- 可输入select选单
- 可输入select选单
- JS三级联动选单
- 下拉选单模糊查询
- Spinner 选单组件
- 下拉选单(droplist)交互设计-控制另一个下拉选单
- 委托加事件:关联选单
- boot.ini//双系统启动选单
- Android 建立Menu选单&&onOptionsItemSelected
- 关于应届毕业生如何选单位
- IONIC----07.module
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^) 算术右移(>>)与逻辑右移(>>>)
- Pro JPA2读书笔记系列(七)-第七章(使用查询)
- OSS对象存储学习——JAVA篇
- 折半查找算法的正确实现
- 多选反选单选
- TCP连接的建立与终止过程
- 【洛谷 P1373 小a和uim之大逃离】dp
- 变态跳台阶
- 级联下拉菜单的实现
- Codeforces Round #363 (Div. 2) C. Vacations (DP)
- 总结广告或垃圾ip
- 分类
- cas服务器登录页面添加验证码