毕业设计:HomeFragment(二)

一、长按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);
    }
时间: 2024-08-29 18:45:30

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

毕业设计:HomeFragment(一)

一.主要思路 主要是通过ListView实现. 考虑到以后会添加长按修改功能,所以好几个地方都是用的FramLayout,而且CheckBox初始状态是被隐藏的.给ListView添加OnItemClickedListener,在识别点击的Item是文件夹时做出响应,把ListView的资源来源改成该文件夹.同时顶部的TextView也要修改成对应文件夹目录. 目前我没有对返回键设置监听器,所以返回上一级菜单是通过顶部的按钮实现的.在根目录下该按钮隐藏,等到进入下一级目录的时候按钮就会显示出来.

代做毕设,代做GIS毕业设计,GIS项目,GIS二次开发,毕业设计

代做毕设,代做GIS毕业设计,GIS项目,GIS二次开发,毕业设计: 代做毕设,代做GIS毕业设计,GIS项目等: 常年从事桌面GIS,ArcGIS数据处理分析等: ArcMap插件开发(.Net,Python): QQ:624030189 纯个人写手,不是商业人员,保证质量! 您是不是还在为做GIS毕业设计苦恼? 没有思路,数据不会处理,不会编程? 软件环境不会安装? 您是不是还在为科研项目中用到GIS而头疼? 图像不会处理,不会制图? 不会写脚本(Net,Python),不会用工具箱进行批处

代做毕设,代做GIS毕业设计,GIS项目,GIS二次开发

代做毕设,代做GIS毕业设计,GIS项目等: 常年从事桌面GIS,ArcGIS数据处理分析等: ArcMap插件开发(.Net,Python): QQ:624030189 您是不是还在为做GIS毕业设计苦恼? 没有思路,数据不会处理,不会编程? 软件环境不会安装? 您是不是还在为科研项目中用到GIS而头疼? 图像不会处理,不会制图? 不会写脚本(Net,Python),不会用工具箱进行批处理? 这些东西,在我们这儿,不在话下:让您从GIS中解脱出来,是我们的目标! 我们能够为您提供解决方案.技术

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

这是本毕业设计的雏形和框架,实现的功能在左侧的功能框导航菜单内.  做的太烂,还是把学校名字给马赛克掉吧....省的挨校友批 登陆界面.. <cookie +ispostback实现记住我功能>/实现验证码校验 点击可以更改验证码 系统三用ASP.net 三层架构,jquery easyui 前台展示 所有后台交互均用jquery ajax进行. 整个页面看起来还是很清爽的.=.=.= 实现的主要功能: 今天要解决的一个问题是JQuery Easyui  中验证框 validatebox 没有

asp.net 毕业设计遗忘的知识点(二)

1.类型"ImageButton"的控件"..."必须放在具有runat=server的窗体标记内. 原因是ImageButton控件没有放在form元素中,并且一个aspx页面只能有一个form. 例如: <form runat=server> <asp:TextBox id="TextBox2" runat="server"></asp:TextBox> </form> 原文

Android实际开发中的首页框架搭建(二、首页框架实现)

本来这一篇是前两天就要写的,奈何事多缠身,推到今日,为自己的拖延感到愧疚... 上一篇大概把项目的结构完成了,下一步就是实现首页切换功能了 首先在activity目录下新建一个HomeActivity,作为承载多个fragment的容器 代码如下 1 /* 2 * * 3 * * ******************************************************* 4 * * 5 * * @文件名称:HomeActivity.java 6 * * @文件作者:ouyan

第一次毕业设计任务书

一.毕业设计安排进度 计划安排时间 计划完成内容 是否完成 2017.3.1---2017.3.7 了解系统需求 是 2017.3.8-2017.3.21 了解算法.数据库以及相关概念 待完成 2017.3.23-2017.5.9 初步毕设,以及完成毕业论文初稿 待完成 2017.5.10-5.28 完善毕业论文和毕业设计,准备答辩 待完成 二.本周研究内容 关联规则 关联规则是由 Agrawal 等人在 1993 年首次提出的,是挖掘数据之间关联知识最常用的方法.关联规则的目的在于在一个数据集

2016届毕业设计(论文) 基本规范及档案袋封面填写要求

  一.论文册要求及装订顺序:(注:1-6装订成一册,7-10单独存放档案材料中) (1)论文册外封面(使用全校统一的封面,论文用毕业论文封面,设计说明书用毕业设计封面). (2)原创性声明及论文使用授权声明. (3)立题卡. (4)任务书. (5)开题报告. (6)毕业论文或毕业设计. (7)中期检查表. (8)成绩评定表. (9)中英文翻译. (10)答辩记录. 二.毕业设计材料日期填写: (1)立题卡.任务书填写时间:2016年1月15日 (2)开题报告填写时间:      2016年3月

从软件工程的视角,回顾本科毕业设计,探视设计中存在的不足

本科毕业设计题目:江西省宜黄县东源银多金属矿普查设计 本普查设计是针对江西省宜黄县东源银多金属矿进行的.在收集前人工作的地质资料和矿区预查成果的基础上进行地质调查,部署一定的工程用来探索含矿破碎带的形态.产状.延伸.延深.蚀变.含矿性及矿化规律. 软件工程是一门强调采用工程的概念.原理. 技术和方法来开发软件系统的科学.主要包括: 需求分析.总体设计.详细设计和系统实现几个部分.结合对软件工程的学习,我发现我的毕业设计存在以下几点不足: 一.在野外地质工作中,我们主要是通过定点投图和野外地质记录