zoukankan      html  css  js  c++  java
  • 毕业设计: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);
        }
  • 相关阅读:
    八大排序算法思想介绍
    关于高并发问题的点滴思考
    一致性Hash算法的原理与实现(分布式映射算法)
    Java线程安全与锁优化
    JAVA体系的线程的实现,线程的调度,状态的转换
    CSS + ul li 横向排列的两种方法
    CSS 有序或者无序列表的前面的标记 list-style-type 属性
    HTML+CSS实现导航栏二级下拉菜单完整代码
    C#中关于DataGridView行和列的背景色-前景色设置
    WinForm------GridControl单元格内容修改外表样式
  • 原文地址:https://www.cnblogs.com/viaduct/p/6673557.html
Copyright © 2011-2022 走看看