精华内容
下载资源
问答
  • Q: 人员列表页面切换保留筛选项 ans: /** * 表单组件在挂载时,将组件的 fields 值赋给对应的交互组件 */ componentDidMount() { const { fields, pageIndex } = View; this.props.form.setFieldsValue(fields);...
    Q: 人员列表页面切换保留筛选项

    ans:

    /**
     * 表单组件在挂载时,将组件的 fields 值赋给对应的交互组件
     */
    componentDidMount() {
        const { fields, pageIndex } = View;
        this.props.form.setFieldsValue(fields);
        this.getUser(pageIndex);
    }
    
    /**
     * 表单组件在卸载时,将对应的交互组件的值赋给组件的 fields
     */
    componentWillUnmount() {
        View.fields = this.props.form.getFieldsValue();
        View.pageIndex = this.state.pageIndex;
    }
    
    

    可以保留所有筛选项以及当前pageIndex等。在组件卸载的时候,都是存储在View当前的实例上。在组件重新加载的时候,又设置当前form的值,以及传递当前pageIndex。

    记录一下~

    展开全文
  • Qt可以通过使用QAxObject操作excel,具体的方法这里不做介绍。假设获取到sheet的指针 QAxObject* workSheet; 设置第一行添加自动筛选。 QAxO
    Qt可以通过使用QAxObject操作excel,具体的方法这里不做介绍。假设获取到sheet的指针 QAxObject* workSheet;   

    设置第一行添加自动筛选。


    QAxObject* range = workSheet->querySubObject("Range(String)","A1");  
    range->querySubObject("AutoFilter(int)",1);


    展开全文
  • vue elementui 表格搜索筛选栏组件封装

    千次阅读 热门讨论 2020-01-19 15:35:54
    vue后台管理系统,会有很多表格页面,表格上方会有一些搜索选项,表格直接使用el-table即可,而搜索栏区域每次写起来都很繁琐,而且多人开发情况下每个人写的样式都不相同,布局样式无法统一。 所以要考虑对搜索栏做...

    1、背景

    vue后台管理系统,会有很多表格页面,表格上方会有一些搜索选项。表格直接使用el-table即可,而搜索栏区域每次写起来都很繁琐,且多人开发情况下每个人写的样式都不相同,布局样式无法统一。

    所以要考虑对搜索栏做一个封装,统一配置引用,提升开发维护效率和界面统一。

    完成后的效果大概就是长这样:
    在这里插入图片描述

    2、分析

    项目使用的是elementui框架,搜索栏这种表单提交,首先要使用el-form组件来封装,而复杂点就是表单项可能有很多种,例如input输入框、select选择框、日期时间选择框、日期时间范围选择框、cascader级联选择框等,每一项的字段名prop、名称label、绑定的属性方法都不尽相同。所以不能通过普通的绑定个别属性的方式来处理,而slot插槽的方式也无法简化,最终决定通过传递一个配置项数组的形式来解析生成相应的结构。

    3、实现

    目前实现的方式由两部分组成,一部分是form表单组件,接受父组件传递的配置项数组,一部分是封装一些常用的表单项组件,通过v-if来控制,form表单组件里引入该表单项组件,循环遍历,根据传递的表单项类型来匹配显示具体的表单项。

    (1)form表单组件(searchForm.vue)示例代码:

    <el-form
      :model="formData"
      ref="formRef"
      :inline="true"
    >
      <el-form-item
        v-for="(item, index) in formOptions"
        :key="newKeys[index]"
        :prop="item.prop"
        :label="item.label ? (item.label + '') : ''"
        :rules="item.rules"
      >
        <formItem
          v-model="formData[item.prop]"
          :itemOptions="item"
        />
      </el-form-item>
    </el-form>
    

    (2)formItem表单项组件(formItem.vue)示例代码:

    <el-input
      v-if="isInput"
      v-model="currentVal"
      v-bind="bindProps"
      v-on="bindEvents"
      size="mini"
    ></el-input>
    
    <el-select
      v-if="isSelect"
      v-model="currentVal"
      v-bind="bindProps"
      v-on="bindEvents"
      size="mini"
      clearable
     >
      <el-option
        v-for="item in itemOptions.options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      ></el-option>
    </el-select>
    

    4、关键点

    由于elementui表单组件本身有很多配置属性,不可能把所有的属性和方法都写死封装,要想无缝支持,需要用到vue的v-bind和v-on特性,vue的v-bind和v-on支持赋值为对象类型,vue会自动遍历对象里的属性依次绑定,v2.4.0+支持。

    5、参数配置项解释

    (1)示例:

    [{
    	label: '用户名', // label文字
    	prop: 'username', // 字段名
    	element: 'el-input', // 指定elementui组件
    	initValue: '阿黄', // 字段初始值
    	placeholder: '请输入用户名', // elementui组件属性
    	rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
    	events: { // elementui组件方法
    		input (val) {
    			console.log(val)
    		},
    	}
    }]
    
    • label 用于绑定给el-form-item上的label,表单项标题
    • prop 用于绑定给el-form-item上的prop,字段名,必填
    • element 指定elementui表单项的组件名,必填
    • initValue 表单项的初始值,可选
    • events 对象,对象里加方法,js原生方法或者elementui表单项组件支持的方法都可以加进去,通过v-on遍历绑定
    • … 其他elementui表单项组件支持的属性或者html原生属性都可以添加,常用的例如rules表单校验、placeholder提示,通过v-bind遍历绑定

    (2)参数传递解析的流程:

    • 首先,searchForm.vue组件里通过props接收参数:
    formOptions: {
      type: Array,
      required: true,
      default () {
        return []
      }
    },
    
    • created生命周期里处理初始值:
    // 添加初始值
    addInitValue () {
      const obj = {}
      this.formOptions.forEach(v => {
        if (v.initValue !== undefined) {
          obj[v.prop] = v.initValue
        }
      })
      this.formData = obj
    }
    
    • 一部分配置项绑定在el-form-item上,一部分传递给formItem表单项组件再绑定:
    <el-form-item
      v-for="(item, index) in formOptions"
      :key="newKeys[index]"
      :prop="item.prop"
      :label="item.label ? (item.label + '') : ''"
      :rules="item.rules"
    >
      <formItem
        v-model="formData[item.prop]"
        :itemOptions="item"
      />
    </el-form-item>
    
    • formItem.vue表单项组件里props接受传参:
    itemOptions: {
      type: Object,
      default () {
        return {}
      }
    }
    
    • computed里处理接收的参数itemOptions,生成要绑定的所有属性对象bindProps:
    // 绑定属性
    bindProps () {
      let obj = { ...this.itemOptions }
      // 移除已使用的或不相关的冗余属性
      delete obj.label
      delete obj.prop
      delete obj.element
      delete obj.initValue
      delete obj.rules
      delete obj.events
      if (obj.element === 'el-select') {
        delete obj.options
      }
      return obj
    },
    
    • computed里生成要绑定的所有方法对象bindEvents:
    // 绑定方法
    bindEvents () {
      return this.itemOptions.events || {}
    },
    
    • 最后dom里使用这些数据绑定:
    <el-input
      v-if="isInput"
      v-model="currentVal"
      v-bind="bindProps"
      v-on="bindEvents"
    ></el-input>
    

    (3)特殊情况的处理

    由于elementui的el-select里是通过el-option遍历实现的,而遍历数组options按elementui官方不是绑定在el-select上的,所以针对el-select的配置项再加一个options属性,即select选择项的数据数组。

    <el-select
     v-if="isSelect"
     v-model="currentVal"
     v-bind="bindProps"
     v-on="bindEvents"
     size="mini"
     clearable
    >
     <el-option
       v-for="item in itemOptions.options"
       :key="item.value"
       :label="item.label"
       :value="item.value"
     ></el-option>
    </el-select>
    

    elementui的日期时间选择器分了很多种,根据业务需要分别处理一下,我这里是根据type划分成了三种分开处理,最常用的是datetimerange日期时间范围选择器,作为默认项,还有一种monthrange,其余的都划为一种。(具体处理见文章末尾的完整代码)

    6、按钮组

    按钮其实就那么几个,没必要做太多的封装,根据业务有哪些按钮就封装进去,目前我这里就封装了三个按钮。
    通过props接受一个字符串标识按钮组:

    // 提交按钮项,多个用逗号分隔(search搜索, export导出, reset重置)
    btnItems: {
      type: String,
      default () {
        return 'search'
      }
    }
    

    7、使用方式示例

    • dom里:
    <!-- 搜索 -->
    <searchForm :formOptions="formOptions" @onSearch="onSearch"/>
    
    • vue data里:
    data () {
      return {
        formOptions: [
    	  {
    	    label: '意见内容',
    	    prop: 'content',
    	    element: 'el-input'
    	  },
    	  {
    	    label: '类型',
    	    prop: 'type',
    	    element: 'el-select',
    	    options: [
    	      { label: '给点意见', value: '1' },
    	      { label: '售后问题', value: '2' }
    	    ]
    	  },
    	  {
    	    label: '状态',
    	    prop: 'status',
    	    element: 'el-select',
    	    options: getFeedbackStatus()
    	  },
    	  {
    	    label: '提交时间',
    	    prop: 'timeRange',
    	    element: 'el-date-picker'
    	  }
    	],
      }
    }
    
    
    • vue methods里:
    methods: {
      // 获取搜索表单提交的数据
      onSearch (val) {
    	console.log(val)
      }
    }
    
    

    8、完整代码

    (1)searchForm.vue

    /**
     * 搜索栏公共组件
     */
    <template>
      <div class="search-form-box">
        <el-form
          :model="formData"
          ref="formRef"
          :inline="true"
        >
          <el-form-item
            v-for="(item, index) in formOptions"
            :key="newKeys[index]"
            :prop="item.prop"
            :label="item.label ? (item.label + '') : ''"
            :rules="item.rules"
          >
            <formItem
              v-model="formData[item.prop]"
              :itemOptions="item"
            />
          </el-form-item>
        </el-form>
    
        <!-- 提交按钮 -->
        <div class="btn-box">
          <el-button
            v-if="btnItems.includes('search')"
            size="mini"
            type="primary"
            class="btn-search"
            @click="onSearch"
          >搜索</el-button>
    
          <el-button
            v-if="btnItems.includes('export')"
            size="mini"
            type="primary"
            class="btn-export"
            @click="onExport"
          >导出</el-button>
    
          <el-button
            v-if="btnItems.includes('reset')"
            size="mini"
            type="default"
            class="btn-reset"
            @click="onReset"
          >重置</el-button>
        </div>
      </div>
    </template>
    
    <script>
    import formItem from './formItem'
    import tools from '@/utils/tools'
    
    export default {
      props: {
        /**
         * 表单配置
         * 示例:
         * [{
         *   label: '用户名', // label文字
         *   prop: 'username', // 字段名
         *   element: 'el-input', // 指定elementui组件
         *   initValue: '阿黄', // 字段初始值
         *   placeholder: '请输入用户名', // elementui组件属性
         *   rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
         *   events: { // elementui组件方法
         *     input (val) {
         *       console.log(val)
         *     },
         *     ...... // 可添加任意elementui组件支持的方法
         *   }
         *   ...... // 可添加任意elementui组件支持的属性
         * }]
         */
        formOptions: {
          type: Array,
          required: true,
          default () {
            return []
          }
        },
        // 提交按钮项,多个用逗号分隔(search, export, reset)
        btnItems: {
          type: String,
          default () {
            return 'search'
          }
        }
      },
    
      data () {
        return {
          formData: {}
        }
      },
    
      computed: {
        newKeys () {
          return this.formOptions.map(v => {
            return tools.createUniqueString()
          })
        }
      },
    
      created () {
        this.addInitValue()
      },
    
      methods: {
        // 校验
        onValidate (callback) {
          this.$refs.formRef.validate(valid => {
            if (valid) {
              console.log('提交成功')
              console.log(this.formData)
              callback()
            }
          })
        },
        // 搜索
        onSearch () {
          this.onValidate(() => {
            this.$emit('onSearch', this.formData)
          })
        },
        // 导出
        onExport () {
          this.onValidate(() => {
            this.$emit('onExport', this.formData)
          })
        },
        onReset () {
          this.$refs.formRef.resetFields()
        },
        // 添加初始值
        addInitValue () {
          const obj = {}
          this.formOptions.forEach(v => {
            if (v.initValue !== undefined) {
              obj[v.prop] = v.initValue
            }
          })
          this.formData = obj
        }
      },
    
      components: { formItem }
    }
    </script>
    
    <style lang='less' scoped>
    .search-form-box {
      display: flex;
      margin-bottom: 15px;
    
      .btn-box {
        padding-top: 5px;
        display: flex;
    
        button {
          height: 28px;
        }
      }
      .el-form {
        /deep/ .el-form-item__label {
          padding-right: 0;
        }
        .el-form-item {
          margin-bottom: 0;
    
          &.is-error {
            margin-bottom: 22px;
          }
        }
        // el-input宽度
        /deep/ .form-item {
          > .el-input:not(.el-date-editor) {
            width: 120px;
          }
        }
        /deep/ .el-select {
          width: 120px;
        }
        /deep/ .el-cascader {
          width: 200px;
        }
      }
    }
    
    </style>
    
    

    (2)formItem.vue

    /**
     * 表单匹配项
     */
    <template>
      <div class='form-item'>
        <el-input
          v-if="isInput"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          size="mini"
        ></el-input>
    
        <el-input-number
          v-if="isInputNumber"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          :controls-position="itemOptions['controls-position'] || 'right'"
          size="mini"
        ></el-input-number>
    
        <el-select
          v-if="isSelect"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          size="mini"
          clearable
         >
          <el-option
            v-for="item in itemOptions.options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          ></el-option>
        </el-select>
    
        <!-- datetimerange/daterange -->
        <el-date-picker
          v-if="isDatePickerDateRange"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          :type="itemOptions.type || 'datetimerange'"
          size="mini"
          clearable
          :picker-options="pickerOptionsRange"
          start-placeholder="开始日期"
          range-separator=""
          end-placeholder="结束日期"
          :default-time="['00:00:00', '23:59:59']"
          value-format="yyyy-MM-dd HH:mm:ss"
        ></el-date-picker>
    
        <!-- monthrange -->
        <el-date-picker
          v-if="isDatePickerMonthRange"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          type="monthrange"
          size="mini"
          clearable
          :picker-options="pickerOptionsRangeMonth"
          start-placeholder="开始日期"
          range-separator=""
          end-placeholder="结束日期"
          value-format="yyyy-MM"
        ></el-date-picker>
    
        <!-- others -->
        <el-date-picker
          v-if="isDatePickerOthers"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          :type="itemOptions.type"
          size="mini"
          clearable
          placeholder="请选择日期"
        ></el-date-picker>
    
        <el-cascader
          v-if="isCascader"
          v-model="currentVal"
          v-bind="bindProps"
          v-on="bindEvents"
          size="mini"
          clearable
        ></el-cascader>
      </div>
    </template>
    
    <script>
    import tools from '@/utils/tools'
    
    export default {
      inheritAttrs: false,
    
      props: {
        value: {},
        itemOptions: {
          type: Object,
          default () {
            return {}
          }
        }
      },
    
      data () {
        return {
          pickerOptionsRange: tools.pickerOptionsRange,
          pickerOptionsRangeMonth: tools.pickerOptionsRangeMonth
        }
      },
    
      computed: {
        // 双向绑定数据值
        currentVal: {
          get () {
            return this.value
          },
          set (val) {
            this.$emit('input', val)
          }
        },
        // 绑定属性
        bindProps () {
          let obj = { ...this.itemOptions }
          // 移除冗余属性
          delete obj.label
          delete obj.prop
          delete obj.element
          delete obj.initValue
          delete obj.rules
          delete obj.events
          if (obj.element === 'el-select') {
            delete obj.options
          }
          return obj
        },
        // 绑定方法
        bindEvents () {
          return this.itemOptions.events || {}
        },
        // el-input
        isInput () {
          return this.itemOptions.element === 'el-input'
        },
        // el-input-number
        isInputNumber () {
          return this.itemOptions.element === 'el-input-number'
        },
        // el-select
        isSelect () {
          return this.itemOptions.element === 'el-select'
        },
        // el-date-picker (type: datetimerange/daterange)
        isDatePickerDateRange () {
          const isDatePicker = this.itemOptions.element === 'el-date-picker'
          const isDateRange = !this.itemOptions.type ||
            this.itemOptions.type === 'datetimerange' ||
            this.itemOptions.type === 'daterange'
          return isDatePicker && isDateRange
        },
        // el-date-picker (type: monthrange)
        isDatePickerMonthRange () {
          const isDatePicker = this.itemOptions.element === 'el-date-picker'
          const isMonthRange = this.itemOptions.type === 'monthrange'
          return isDatePicker && isMonthRange
        },
        //  el-date-picker (type: other)
        isDatePickerOthers () {
          const isDatePicker = this.itemOptions.element === 'el-date-picker'
          return isDatePicker && !this.isDatePickerDateRange && !this.isDatePickerMonthRange
        },
        // el-cascader
        isCascader () {
          return this.itemOptions.element === 'el-cascader'
        }
      },
    
      created () {},
    
      methods: {},
    
      components: {}
    }
    </script>
    
    <style lang='less' scoped>
    
    </style>
    
    

    (3)依赖引入的一些函数方法 tools.js

    /**
     * 创建唯一的字符串
     * @return {string} ojgdvbvaua40
     */
    function createUniqueString () {
      const timestamp = +new Date() + ''
      const randomNum = parseInt((1 + Math.random()) * 65536) + ''
      return (+(randomNum + timestamp)).toString(32)
    }
    
    // elementui日期时间范围 快捷选项
    const pickerOptionsRange = {
      shortcuts: [
        {
          text: '今天',
          onClick (picker) {
            const end = new Date()
            const start = new Date(new Date().toDateString())
            start.setTime(start.getTime())
            picker.$emit('pick', [start, end])
          }
        }, {
          text: '最近一周',
          onClick (picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 7)
            picker.$emit('pick', [start, end])
          }
        }, {
          text: '最近一个月',
          onClick (picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
            picker.$emit('pick', [start, end])
          }
        }, {
          text: '最近三个月',
          onClick (picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
            picker.$emit('pick', [start, end])
          }
        }
      ]
    }
    
    // elementui月份范围 快捷选项
    const pickerOptionsRangeMonth = {
      shortcuts: [
        {
          text: '今年至今',
          onClick (picker) {
            const end = new Date()
            const start = new Date(new Date().getFullYear(), 0)
            picker.$emit('pick', [start, end])
          }
        },
        {
          text: '最近半年',
          onClick (picker) {
            const end = new Date()
            const start = new Date()
            start.setMonth(start.getMonth() - 6)
            picker.$emit('pick', [start, end])
          }
        },
        {
          text: '最近一年',
          onClick (picker) {
            const end = new Date()
            const start = new Date()
            start.setMonth(start.getMonth() - 12)
            picker.$emit('pick', [start, end])
          }
        }
      ]
    }
    

    (4)一些elmentui全局样式的修改

    // el-input-number (controls-position="right")
    .el-input-number.is-controls-right {
      .el-input-number__decrease {
        display: none;
      }
      .el-input-number__increase {
        display: none;
        top: 2px; // fix style bug
      }
      &:hover {
        .el-input-number__decrease {
          display: inline-block;
        }
        .el-input-number__increase {
          display: inline-block;
        }
      }
      .el-input__inner {
        text-align: left;
        padding-left: 5px;
        padding-right: 40px;
      }
    }
    
    // el-date-picker datetimerange
    .el-date-editor.el-date-editor--datetimerange {
      .el-range-separator {
        width: 24px;
        color: #999;
        padding: 0;
      }
      .el-range__icon {
        margin-left: 0;
      }
      &.el-input__inner {
        vertical-align: middle;
        padding: 3px 5px;
      }
      &.el-range-editor--medium {
        width: 380px;
    
        .el-range-separator {
          line-height: 30px;
        }
      }
      &.el-range-editor--mini {
        width: 330px;
    
        .el-range-separator {
          line-height: 22px;
        }
      }
    }
    
    // el-date-picker  not datetimerange
    .el-date-editor {
      .el-input__prefix {
        left: 0;
        top: 1px;
      }
      .el-input__suffix {
        right: 0;
        top: 1px;
      }
      .el-input__inner {
        padding: 0 25px;
      }
      &.el-input--mini {
        width: 175px;
      }
      &.el-input--medium {
        width: 195px;
      }
    }
    
    // input padding
    .el-input__inner {
      padding: 0 5px;
    }
    
    展开全文
  • [向上滑动筛选项消失](https://img-ask.csdn.net/upload/201603/02/1456931381_468463.jpg) 就是淘宝这种结果页,当listview向上滑动之后筛选栏和导航栏都会收起,但是listview无明显滑动现象,好似listview滑动就是...
  • AutoCompleteTextView的简单使用,搜索时弹出可选择

    一、实现效果

    在这里插入图片描述

    二、实现步骤

    2.1 布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical"
        tools:context="com.example.edm.Student.SingleSubjectActivity">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="#5DC45D">
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="单科成绩及排名查询"
                android:textSize="20sp"
                android:paddingTop="20dp"
                android:paddingLeft="25dp"
                android:paddingBottom="10dp"
                android:textColor="#FFFFFF">
            </TextView>
    
    
            <AutoCompleteTextView
                android:id="@+id/auto_comp"
                android:layout_width="320dp"
                android:layout_height="39dp"
                android:textSize="16sp"
                android:textColor="#DE6210"
                android:paddingLeft="10dp"
                android:paddingRight="20dp"
                android:drawableRight="@mipmap/tab_query_normal"
                android:hint="输入科目名称:"
                android:background="@drawable/edittext_selector"
                android:maxLines="1"
                android:paddingBottom="2dp"
                android:paddingTop="2dp"
                android:layout_marginTop="7dp"
                android:layout_marginBottom="18dp"
                android:layout_marginLeft="21dp"
                android:completionThreshold="1">
    
            </AutoCompleteTextView>
        </LinearLayout>
    </LinearLayout>
    

    布局很简单,声明一个AutoCompleteTextView就好了。

    2.2 弹出的item样式

    item就是当我们输入时弹出的那个东东,长这样:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffffff"
        android:padding="10dp"
        android:textSize="16sp"
        android:textColor="#000000">
    </TextView>
    

    2.3 主界面代码

    package com.example.edm.Student;
    
    import android.animation.ValueAnimator;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.animation.LinearInterpolator;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import com.example.edm.MainActivity;
    import com.example.edm.R;
    import com.example.edm.SQLiteManager;
    import com.example.edm.ToastUtil;
    
    
    import java.util.List;
    
    public class SingleSubjectActivity extends AppCompatActivity {
    
        private ArrayAdapter<String> adapter;
        private AutoCompleteTextView completeTextView;
        String course[] = {"离散数学B", "高等数学B1", "高等数学B2", "C语言课程设计", "Java语言程序设计"};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_single_subject);
            findViews();
            initView();
            
        private void findViews() {
            completeTextView = findViewById(R.id.auto_comp);
            adapter = new ArrayAdapter<>(this, R.layout.auto_list, course);
            completeTextView.setAdapter(adapter);
        }
          
    }
    
    展开全文
  • 基于ES的搜索+筛选+排序解决方案

    万次阅读 2018-03-13 19:59:12
    转载提纲:曾经的基于MongoDB的筛选+排序解决方案MongoDB方案的缺陷看中了搜索引擎的facet特性看中了ES的简洁看中了ES的天生分布式设计窝窝的ES方案ES的几次事故和教训ES自身存在的问题一,曾经的基于 MongoDB 的...
  • 人员选择树,搜索自动筛选功能

    千次阅读 2016-09-22 22:15:13
    1、点击收件人输入框可以根据拼音自动筛选数据,并且标记已经选择的数据,没有结果的时候提示,相应的更新左边树节点状态 2、勾选树右侧树的节点左侧输入框出现一一对应的节点名称用到的插件 vue+chosen+ztree ...
  • QTreeWidget搜索并隐藏不匹配的

    千次阅读 2018-12-19 09:29:33
    QTreeWidget可以呈现出数据的层次关系,有时需要对数据进行筛选,只显示结果,其他隐藏。如下图所示 通过查询QTreeWidget的方法可以看到有个setRowHidden方法可以隐藏行,Qt assistant中说明如下: void ...
  • 详情页返回列表页,保留列表页之前的筛选条件 将之前的搜索条件保存到cookie 中,从指定页面(详情页或列表页)返回到搜索条件页面后,从cookie中获取之前存入的参数。 1、发出查询请求前,将参数存入cookie中。 2、...
  • //例子四 中文只能四 全改成英文无限制 ""_id"" :0, //缺省方式为1,必需为0,否则会出错 ""主管机构"" :1,全改成 英文如""ZDJG"" :1 则成功 //""客户ID"" :1, ""客户名称"" :1, //""客户种类"" :1, /...
  • 决定放假期间先不上iOS Wow体验了;手头这篇译文不做完的话我心不甘。...今次这篇则是来自于本书的第四章——搜索、排序和筛选。貌似国内引进版也由XX出版社在做着了,真心不关我事,自己走起。接下来
  • Android 商品筛选功能实现

    千次阅读 2018-02-25 11:07:38
    前段时间做了个网上商城项目,里面含有类似京东商品搜索功能,感觉此功能普遍适用所有在此贴出实现步骤 先看效果 主页面的布局 由于布局简单,就不多啰嗦了,只是在外面放了一个 ...
  • 在表格部件中,可以根据文本以及匹配模式来搜索满足条件的,调用语法: list[QTableWidgetItem] findItems( str text, Qt.MatchFlags flags) 返回值为所有满足条件的构成的列表,如果没有找到匹配,返回空列表...
  • Jira中最好用的功能莫过于筛选器与仪表板了,本文简单总结这两个...筛选结果视图类型设置为“列表”显示更清晰 5.点开“列”可以自定义需要显示在列表中的字段 6.另存为,可以保存为筛选器,下次直接点开该
  • 封装组合控件实现一个简单的多条件筛选菜单,可根据自己需求定制筛选条件,动态添加筛选项,灵活使用。 控件封装,点击切换,使用popupWindow实现下拉列表,项目中封装了多种数组数据排序处理方法的工具栏,可对任何...
  • DataView数据筛选

    千次阅读 2010-05-01 13:47:00
    DataView摘要: 表示用于排序、筛选搜索、编辑和导航的 System.Data.DataTable 的可绑定数据的自定义视图。 RowFilter 摘要:获取或设置用于筛选在 System.Data.DataView 中查看哪些行的表达式 我们可以通过对...
  • 今天我们来讲一下Excel的筛选功能,筛选功能可以在一大堆的数据中,按照某个条件筛选出来我们想要的数据;比如一整个年级的考试成绩,筛选出来某个班的。 1如何开启筛选 选中区域内的任一单元格;使用快捷键Ctrl ...
  • 通常,我们使用WPS的筛选功能时,输入...首先筛选出第一次要筛选出的内容,然后再次使用筛选器图标,输入新的搜索条件,然后“将当前所选内容添加到筛选器”,若有更多条件,重复执行第二次的操作即可。 使用高级...
  • Android仿京东侧滑筛选

    千次阅读 2017-02-11 16:52:39
    这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括ListView+CheckBox滑动冲突,ListView+ GridView显示一行问题解决,接口回调传递数据等 效果图 简单得代码介绍1....
  • 1.直接编辑项目文件xxx.vcxproj 2.搜索xxx.cpp,删除重复即可
  • 目录 1、以搜索的形式进行筛选 ...7、带标签多项筛选 结语 1、以搜索的形式进行筛选 输入框可以输入用户关心的内容,下面可以做到实时筛选,也可以触发点击。但是必须支持模糊查询,否则用户必须记住所...
  • CentOS 7 双系统启动项设置(含Win10)

    千次阅读 2018-07-20 00:31:26
    以下内容针对CentOS 7有效,6版本请绕道,设置方法不一样。  我不喜欢照抄别人的博客,也特别痛恨直接复制粘贴别人博客的行为。导致搜索引擎检索出的都是同一篇博客,如果这篇博客不能解决你的问题,那么你懂得。 ...
  • jira筛选器及仪表盘使用

    千次阅读 2020-03-07 16:33:00
    3、点击“搜索”,搜索出项目筛选项下的bug 4、点击“保存为”给你的筛选器命名并保存你的筛选器。 步骤二:为筛选器添加仪表板,目的将你想要的数据图形化,更方便直观的看筛选数据。 1、打开仪表板...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,885
精华内容 18,354
关键字:

如何设置搜索筛选项