多选反选单选

来源:互联网 发布: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
原创粉丝点击