一、长按item时的响应

在长按item时,我希望能让CheckBox显示出来,并且呼出全选、反选、取消菜单,以及下载、删除、移动、复制操作菜单。

我在具体实现的时候发现处理item布局是一个很大的问题,因为不知道怎么在Fragment里面去改变每一个item的CheckBox状态。经过考虑,我打算把这些方法都写在ListViewAdapter里,并且在这个类里设置一个Map对象,记录每一个position对应的isCheck状态。当我点击每一个CheckBox或者从Fragment里面点击全选/反选时,改变这个Map的值,然后通过重写adapter里的getView方法来控制哪些CheckBox显示为已选,哪些为未选。

而另外的两个菜单,我在HomeFragment布局里面都把他们写了出来,然后初始化为不可见。当长按item触发OnItemLongClickedListener的时候将他们设置为可见,并且把他们覆盖了的组件设置为不可见(避免不可见但仍能响应Click事件的问题)

另外还有一个变量isSelecting我认为非常重要,它用来判断当前Fragment是否是处于选择阶段。

二、FileListAdapter

package com.example.vcloud_3_25.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SimpleAdapter; import com.example.vcloud_3_25.R; public class FileListAdapter extends SimpleAdapter { private Map<Integer, Boolean> isSelected;
private boolean isSelecting;
private List<Map<String, Object>> mResList; @SuppressWarnings("unchecked")
public FileListAdapter(Context context,
List<? extends Map<String, ?>> data, int resource, String[] from,
int[] to) {
super(context, data, resource, from, to);
this.mResList = (List<Map<String, Object>>)data;
init();
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
CheckBox cb = (CheckBox) view.findViewById(R.id.file_checkbox);
if (!isSelecting) {
cb.setVisibility(View.INVISIBLE);
} else {
cb.setVisibility(View.VISIBLE);
cb.setChecked(isSelected.get(position));
}
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton checkBox, boolean flag) {
isSelected.put(position, flag);
}
});
return view;
} @SuppressLint("UseSparseArrays")
public void init() {
isSelected = new HashMap<Integer,Boolean>();
for (int i = 0; i < mResList.size(); i++) {
isSelected.put(i, false); }
isSelecting = false;
}
public void setIsSelecting(boolean flag){
this.isSelecting = flag;
}
public void setSelected(int position,boolean flag){
isSelected.put(position, flag);
}
public Map<Integer,Boolean> getSelected(){
return isSelected;
}
public void selectAll(){
for (int i = 0; i < mResList.size(); i++) {
isSelected.put(i, true);
}
}
public void selectReverse(){
for (int i = 0; i < mResList.size(); i++) {
isSelected.put(i, !isSelected.get(i));
}
}
}

三、HomeFragment里面的一些核心函数

        mListView.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
public boolean onItemLongClick(AdapterView<?> parent, View item,
int position, long id) { if (!isSelecting) {
mFolderIndicator.setVisibility(View.INVISIBLE);
mSelectBar.setVisibility(view.VISIBLE);
mSelectActionBar.setVisibility(view.VISIBLE); isSelecting = true;
adapter.init();
adapter.setIsSelecting(isSelecting);
adapter.setSelected(position, true);
refreshListView();
} return true;
}
});
mSelectCancelButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
backToNormal();
}
}); mSelectAllButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
adapter.selectAll();
refreshListView();
}
});
mSelectReverseButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
adapter.selectReverse();
refreshListView();
}
}); }
private void refreshListView() {
mResList.clear();
mResList.addAll(getResList(recentPid));
adapter.notifyDataSetChanged();
}
private void backToNormal() {
adapter.init();
isSelecting = false;
refreshListView();
mFolderIndicator.setVisibility(View.VISIBLE);
mSelectBar.setVisibility(View.INVISIBLE);
mSelectActionBar.setVisibility(View.INVISIBLE);
}

毕业设计:HomeFragment(二)的更多相关文章

  1. 毕业设计 之 二 PHP学习笔记(一)

    毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...

  2. 毕业设计 之 二 PHP集成环境(Dreamweaver)使用

    毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...

  3. 毕业设计:HomeFragment(一)

    一.主要思路 主要是通过ListView实现. 考虑到以后会添加长按修改功能,所以好几个地方都是用的FramLayout,而且CheckBox初始状态是被隐藏的.给ListView添加OnItemCl ...

  4. 毕业设计 ASP.Net+EasyUI开发 X X露天矿调度管理信息系统(二)

    这是本毕业设计的雏形和框架,实现的功能在左侧的功能框导航菜单内.  做的太烂,还是把学校名字给马赛克掉吧....省的挨校友批 登陆界面.. <cookie +ispostback实现记住我功能& ...

  5. Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)

    文章目录 1.系统功能列表 2.管理员端界面 2.1 商家登录界面 2.2 用户信息管理界面 2.3 汽车管理界面 2.4 订单界面 2.5 汽车图形报表 2.6 优惠券新增界面 3.普通用户界面 3 ...

  6. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  7. Xamarin.Android-用ZXing实现二维码扫描以及连续扫描

    一.前言 本文的内容有两个基础:ZXing.Net和ZXing.Net.Mobile ZXing.Net:ZXing的C#实现,主要封装了各种二维码的编码.解码等跨平台的算法 ZXing.Net.Mo ...

  8. 我的屌丝giser成长记-研二篇

    之前有提到过的,本来按照计划中,研一结束就该去深圳中科院研究所实习的,之前跟里面师兄说好了的,奈何导师又接到一个新的科研研究项目,跟学院的几个其他老师一起合作的,主要是关于土地流转系统,而且是一个挺大 ...

  9. 毕业设计--天气预报App

    9月中旬,开始动手做我的毕业设计了,之前一直在纠结做啥,后来想想,既然是做毕业设计,那就大胆地做点自己没接触过的东西吧.然后网上查找资料得知做天气预报需要用到开放的API,而且要用那种现在还在维护的, ...

随机推荐

  1. javascript XMLHttpRequest 对象的open() 方法参数说明

    下文是从w3c上摘录下来的,其中参数 method 说明的很简短,不是很理解,所以又找了些资料作为补充.文中带括号部分. XMLHttpRequest.open() 初始化 HTTP 请求参数 语法o ...

  2. hdu-5718 Oracle(水题)

    题目链接: Oracle Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 262144/262144 K (Java/Others) ...

  3. BZOJ_1916_[Usaco2010 Open]冲浪_分层图+拓扑排序+DP

    BZOJ_1916_[Usaco2010 Open]冲浪_分层图+拓扑排序+DP Description 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园. ...

  4. Watir: 如何处理简单的网页弹出警告框?

    以下是一个很经典的把Watir与AutoIt连接在一起的实例.如果我们对AutoIT了解的更多,处理类似的问题会更加简单.以下实例会判断页面上是否有某“删除”链接,一旦有该链接,就点击,然后点击弹出的 ...

  5. AndroidStudio修改主题外观和字体大小

    修改主题外观 File --> Settings --> Appearance & Behavior --> Appearance 右边 Theme 修改编辑器的字体大小 F ...

  6. git只clone仓库中指定子目录

    基于sparse clone变通方法 [root@vm_test backup]# mkdir devops[root@vm_test backup]# cd devops/[root@vm_test ...

  7. 【205】C#实现远程桌面访问

    参考:Remote Desktop using C#.NET 参考文件:TscForm.zip 本博客主要是讲述怎样用 .NET 平台中 Microsoft Terminal Services Cli ...

  8. atof和atoi

    atof:将字串转换成浮点型数 表头文件 #include <stdlib.h> 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而 ...

  9. Collection View Programming Guide for iOS---(七)---Custom Layouts: A Worked Example

    Custom Layouts: A Worked Example Creating a custom collection view layout is simple with straightfor ...

  10. Cardboard profile的修改

    Cardboard盒子中,手机屏幕大小.镜片离屏幕距离,屏幕分辨率等都会影响配戴者的眼中成像,通过对生成图像的变形可以部份解决这一问题,cardboard sdk中提供了cardboardprofil ...