您的位置:首页 > 其它

RecyclerView长按条目进行批量删除

2017-03-27 17:17 309 查看

RecyclerView长按条目进行批量删除

因为最近接手了一个有关阅读类的项目,但是这个项目中没有删除书籍
的功能,所以老大就让我在这个项目上添加一个长按条目进行批量删除
的功能,这个功能首先我想到的就是弹出一个取消和确定的布局,再用
CheckBox来进行操作,然后加上逻辑代码进行实现.首先说明这个
RecyclerView用的是GridLayoutManager,其实其他也都大同小
异,接下来我就贴下代码,我只贴主  要业务逻辑代码,其它的就不贴在
上面了.


首先是自己写一个进行删除的时候弹出的delete_title,在activity的布局上include下,不过要把它设为GONE.(因为我这个项目是直接用布局写的一个title,所以我也是用布局写的delete_title;如果你们上面用ToolBar或ActionBar可以使用ActionMode来进行设置),这里布局就不写了,下面我开始来上代码了.

首先要定义一个Boolean值来控制delete_title布局和CheckBox的显示或者消失.条目的javabean中要添加public boolean isChecked属性,后面可以用来判断哪些数据需要删除;

public class HomeRecyclerViewAdapter extends RecyclerView.Adapter {

public boolean isDelete = false;
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
//设置checkBox的显示或者消失
mHolder.checkBox.setVisibility(isDelete?View.VISIBLE:View.INVISIBLE);
mHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
ebook.isChecked = true;
}else {
ebook.isChecked = false;
}
}
});
mHolder.checkBox.setChecked(ebook.isChecked);

mHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
isDelete = true;
mOnItemLongClickListener.onItemLongClickListener();
return true;
}
});
}
}

public interface OnItemLongClickListener{
void onItemLongClickListener();
}

private OnItemLongClickListener mOnItemLongClickListener;

public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
this.mOnItemLongClickListener = mOnItemLongClickListener;
}


Fragment中的代码,注意我只贴了和批量删除的逻辑代码,一些设置较为简单的代码我就没有直接贴上去,看的时候注意.

public class BookShelfFragment extends BaseFragment implements HomeRecyclerViewAdapter.OnItemLongClickListener, View.OnClickListener {
@Override
public void onItemLongClickListener() {
if (recylerViewAdapter.isDelete) {
((HomeActivity) getActivity()).findViewById(R.id.rl_title).setVisibility(View.GONE);
((HomeActivity) getActivity()).findViewById(R.id.title_delete).setVisibility(View.VISIBLE);
notifyDataChanged();
} else {
((HomeActivity) getActivity()).findViewById(R.id.rl_title).setVisibility(View.VISIBLE);
((HomeActivity) getActivity()).findViewById(R.id.title_delete).setVisibility(View.GONE);
notifyDataChanged();
}
}

public Boolean getTitleState() {
return recylerViewAdapter.isDelete;
}

public HomeRecyclerViewAdapter getRecylerViewAdapter() {
return recylerViewAdapter;
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.title_delete_cancel:
((HomeActivity) getActivity()).findViewById(R.id.rl_title).setVisibility(View.VISIBLE);
((HomeActivity) getActivity()).findViewById(R.id.title_delete).setVisibility(View.GONE);
recylerViewAdapter.isDelete = false;
for (int i = 0; i < DataEngine.getInstance().dataSet.size(); i++) {
Ebook ebook = DataEngine.getInstance().dataSet.get(i);
ebook.isChecked = false;
}
notifyDataChanged();
break;
case R.id.title_delete_confirm:
ArrayList<Ebook> deleteList = new ArrayList<>();
for (int i = 0; i < DataEngine.getInstance().dataSet.size(); i++) {
Ebook ebook = DataEngine.getInstance().dataSet.get(i);
if (ebook.isChecked) {
String path = APP.CACHE_DIR + File.separator + ebook.BookName;
File file = new File(pa
c1f7
th);
final File unzipFile = new File(file.getParent() + File.separator + file.getName() + "data");
if (unzipFile.exists()) {
deleteFile(unzipFile);
}
deleteList.add(ebook);
}
}
if (deleteList.size()!=0) {
((HomeActivity) getActivity()).findViewById(R.id.title_delete).setVisibility(View.GONE);
((HomeActivity) getActivity()).findViewById(R.id.rl_title).setVisibility(View.VISIBLE);
recylerViewAdapter.isDelete = false;
DataEngine.getInstance().scanCacheForData(APP.CACHE_DIR);
for (BaseActivity activity : APP.activities) {
activity.notifyDataChanged();
}
}else {
Toast.makeText(getActivity(),"请选择书籍",Toast.LENGTH_SHORT).show();
}
break;
}
}

//删除下载书籍
private void deleteFile(File file) {
if (file.isFile()) {
file.delete();
return;
}

if (file.isDirectory()) {
File[] childFiles = file.listFiles();
if (childFiles == null || childFiles.length == 0) {
file.delete();
return;
}
for (int i = 0; i < childFiles.length; i++) {
deleteFile(childFiles[i]);
}
file.delete();
}
}
}


最后在按返回键的需要进行监听恢复(这个是activity中的代码)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (bookShelfFragment.getTitleState()){
bookShelfFragment.getRecylerViewAdapter().isDelete = false;
mHolder.title.setVisibility(View.VISIBLE);
mHolder.titleDelete.setVisibility(View.GONE);

for (int i = 0; i < DataEngine.getInstance().dataSet.size(); i++) {
Ebook ebook = DataEngine.getInstance().dataSet.get(i);
ebook.isChecked = false;
}
bookShelfFragment.notifyDataChanged();
return false;
}

if (isExit) {
finish();
} else {
isExit = true;
ToastUtil.showSingleInstance(this, "再按一次退出");
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
isExit = false;
}
}, 2000);
}
return true;
}
return super.onKeyDown(keyCode, event);
}


本人菜鸟一个,正在努力学习中,希望大家指正!谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  条目批量删除
相关文章推荐