博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
毕业设计:HomeFragment(二)
阅读量:5294 次
发布时间:2019-06-14

本文共 4696 字,大约阅读时间需要 15 分钟。

一、长按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
isSelected; private boolean isSelecting; private List
> mResList; @SuppressWarnings("unchecked") public FileListAdapter(Context context, List
> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); this.mResList = (List
>)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
(); 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
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); }

转载于:https://www.cnblogs.com/viaduct/p/6673557.html

你可能感兴趣的文章
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
T-SQL触发器,限制一次只能删除一条数据
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>
机器学习基石(9)--Linear Regression
查看>>