精华内容
下载资源
问答
  • uni app 自动化索引列表
    千次阅读
    2020-03-21 16:24:30

    uni app 自动化索引列表,官方推荐的第三方插件
    https://ext.dcloud.net.cn/plugin?id=375

    [{
        "letter": "A",
        "data": [
            "阿克苏机场",
            "阿拉山口机场",
            "阿勒泰机场",
            "阿里昆莎机场",
            "安庆天柱山机场",
            "澳门国际机场"
        ]
    }, {
        "letter": "B",
        "data": [
            "保山机场",
            "包头机场",
            "北海福成机场",
            "北京南苑机场",
            "北京首都国际机场"
        ]
    }]
    

    数据格式必须自己往对应字母数组里填充数据,我们服务端返回的数据,没按照这种已经分好声母类别的数据下发,,必须先做声母分类,第三方插件没做。

    网上自己找了个声母分类填充数据的js方法,然后再按照官方插件要求格式填充数据,调用 buildTextData 方法,参数arr是服务器下发数组数据, obj.psnName,请按照实际字段名称填写,等同于 “北京首都国际机场” 数据,, 就可以把所有数据填充上,复制给插件的组件数据,就可以显示出来了。

    <template>
    	<view >
    		<uni-indexed-list :options="showArr" :show-select="false" @click="bindClick"/>
    	</view>
    </template>
    
    <script>
    	import uniIndexedList from '@/components/uni-indexed-list/uni-indexed-list.vue'
    	export default {
    		components: {
    			uniIndexedList
    		},
    		data() {
    			return {
    			}
    		},
    		methods: {
    			buildTextData: function(arr){
    				var textData = [{ letter: "A", data: [] }, 
    					 { letter: "B", data: [] }, 
    					 { letter: "C", data: [] }, 
    					 { letter: "D", data: [] }, 
    					 { letter: "E", data: [] }, 
    					 { letter: "F", data: [] }, 
    					 { letter: "G", data: [] }, 
    					 { letter: "H", data: [] }, 
    					 { letter: "I", data: [] }, 
    					 { letter: "J", data: [] }, 
    					 { letter: "K", data: [] }, 
    					 { letter: "L", data: [] }, 
    					 { letter: "M", data: [] },
    					 { letter: "N", data: [] }, 
    					 { letter: "O", data: [] }, 
    					 { letter: "P", data: [] }, 
    					 { letter: "Q", data: [] }, 
    					 { letter: "R", data: [] }, 
    					 { letter: "S", data: [] }, 
    					 { letter: "T", data: [] }, 
    					 { letter: "U", data: [] }, 
    					 { letter: "V", data: [] }, 
    					 { letter: "W", data: [] }, 
    					 { letter: "X", data: [] }, 
    					 { letter: "Y", data: [] }, 
    					 { letter: "Z", data: [] }, 
    					 { letter: "#", data: [] }];
    					
    					for (var i = 0; i < arr.length; i++) {
    						var obj = arr[i];
    						var firstChar = obj.psnName.substr(0, 1);
    						firstChar = firstChar.toUpperCase();
    						var reg = this.query(firstChar)[0];
    						var temIndex = this.charsABC.indexOf(reg);
    						if (temIndex == -1){
    							temIndex = 26;
    						}
    						textData[temIndex].data.push(obj);
    					}
    					return textData;
    			}
    			
    		}
    	}
    </script>
    

    声母分类填充数据的js方法,代码如下:

    <script>
    	export default {
    		data() {
    			return {
    				charsABC:['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#'],
    				strChineseFirstPY : "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZupxXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY",
    				oMultiDiff : { "19969": "DZ", "19975": "WM", "19988": "QJ", "20048": "YL", "20056": "SC", "20060": "NM", "20094": "QG", "20127": "QJ", "20167": "QC", "20193": "YG", "20250": "KH", "20256": "ZC", "20282": "SC", "20285": "QJG", "20291": "TD", "20314": "YD", "20340": "NE", "20375": "TD", "20389": "YJ", "20391": "CZ", "20415": "PB", "20446": "YS", "20447": "SQ", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20985": "AW", "21032": "PB", "21048": "XQ", "21049": "SC", "21089": "YS", "21119": "JC", "21242": "SB", "21273": "SC", "21305": "YP", "21306": "QO", "21330": "ZC", "21333": "SDC", "21345": "QK", "21378": "CA", "21397": "SC", "21414": "XS", "21442": "SC", "21477": "JG", "21480": "TD", "21484": "ZS", "21494": "YX", "21505": "YX", "21512": "HG", "21523": "XH", "21537": "PB", "21542": "PF", "21549": "KH", "21571": "E", "21574": "DA", "21588": "TD", "21589": "O", "21618": "ZC", "21621": "KHA", "21632": "ZJ", "21654": "KG", "21679": "LKG", "21683": "KH", "21710": "A", "21719": "YH", "21734": "WOE", "21769": "A", "21780": "WN", "21804": "XH", "21834": "A", "21899": "ZD", "21903": "RN", "21908": "WO", "21939": "ZC", "21956": "SA", "21964": "YA", "21970": "TD", "22003": "A", "22031": "JG", "22040": "XS", "22060": "ZC", "22066": "ZC", "22079": "MH", "22129": "XJ", "22179": "XA", "22237": "NJ", "22244": "TD", "22280": "JQ", "22300": "YH", "22313": "XW", "22331": "YQ", "22343": "YJ", "22351": "PH", "22395": "DC", "22412": "TD", "22484": "PB", "22500": "PB", "22534": "ZD", "22549": "DH", "22561": "PB", "22612": "TD", "22771": "KQ", "22831": "HB", "22841": "JG", "22855": "QJ", "22865": "XQ", "23013": "ML", "23081": "WM", "23487": "SX", "23558": "QJ", "23561": "YW", "23586": "YW", "23614": "YW", "23615": "SN", "23631": "PB", "23646": "ZS", "23663": "ZT", "23673": "YG", "23762": "TD", "23769": "ZS", "23780": "QJ", "23884": "QK", "24055": "XH", "24113": "DC", "24162": "ZC", "24191": "GA", "24273": "QJ", "24324": "NL", "24377": "TD", "24378": "QJ", "24439": "PF", "24554": "ZS", "24683": "TD", "24694": "WE", "24733": "LK", "24925": "TN", "25094": "ZG", "25100": "XQ", "25103": "XH", "25153": "PB", "25170": "PB", "25179": "KG", "25203": "PB", "25240": "ZS", "25282": "FB", "25303": "NA", "25324": "KG", "25341": "ZY", "25373": "WZ", "25375": "XJ", "25384": "A", "25457": "A", "25528": "SD", "25530": "SC", "25552": "TD", "25774": "ZC", "25874": "ZC", "26044": "YW", "26080": "WM", "26292": "PB", "26333": "PB", "26355": "ZY", "26366": "CZ", "26397": "ZC", "26399": "QJ", "26415": "ZS", "26451": "SB", "26526": "ZC", "26552": "JG", "26561": "TD", "26588": "JG", "26597": "CZ", "26629": "ZS", "26638": "YL", "26646": "XQ", "26653": "KG", "26657": "XJ", "26727": "HG", "26894": "ZC", "26937": "ZS", "26946": "ZC", "26999": "KJ", "27099": "KJ", "27449": "YQ", "27481": "XS", "27542": "ZS", "27663": "ZS", "27748": "TS", "27784": "SC", "27788": "ZD", "27795": "TD", "27812": "O", "27850": "PB", "27852": "MB", "27895": "SL", "27898": "PL", "27973": "QJ", "27981": "KH", "27986": "HX", "27994": "XJ", "28044": "YC", "28065": "WG", "28177": "SM", "28267": "QJ", "28291": "KH", "28337": "ZQ", "28463": "TL", "28548": "DC", "28601": "TD", "28689": "PB", "28805": "JG", "28820": "QG", "28846": "PB", "28952": "TD", "28975": "ZC", "29100": "A", "29325": "QJ", "29575": "SL", "29602": "FB", "30010": "TD", "30044": "CX", "30058": "PF", "30091": "YSP", "30111": "YN", "30229": "XJ", "30427": "SC", "30465": "SX", "30631": "YQ", "30655": "QJ", "30684": "QJG", "30707": "SD", "30729": "XH", "30796": "LG", "30917": "PB", "31074": "NM", "31085": "JZ", "31109": "SC", "31181": "ZC", "31192": "MLB", "31293": "JQ", "31400": "YX", "31584": "YJ", "31896": "ZN", "31909": "ZY", "31995": "XJ", "32321": "PF", "32327": "ZY", "32418": "HG", "32420": "XQ", "32421": "HG", "32438": "LG", "32473": "GJ", "32488": "TD", "32521": "QJ", "32527": "PB", "32562": "ZSQ", "32564": "JZ", "32735": "ZD", "32793": "PB", "33071": "PF", "33098": "XL", "33100": "YA", "33152": "PB", "33261": "CX", "33324": "BP", "33333": "TD", "33406": "YA", "33426": "WM", "33432": "PB", "33445": "JG", "33486": "ZN", "33493": "TS", "33507": "QJ", "33540": "QJ", "33544": "ZC", "33564": "XQ", "33617": "YT", "33632": "QJ", "33636": "XH", "33637": "YX", "33694": "WG", "33705": "PF", "33728": "YW", "33882": "SR", "34067": "WM", "34074": "YW", "34121": "QJ", "34255": "ZC", "34259": "XL", "34425": "JH", "34430": "XH", "34485": "KH", "34503": "YS", "34532": "HG", "34552": "XS", "34558": "YE", "34593": "ZL", "34660": "YQ", "34892": "XH", "34928": "SC", "34999": "QJ", "35048": "PB", "35059": "SC", "35098": "ZC", "35203": "TQ", "35265": "JX", "35299": "JX", "35782": "SZ", "35828": "YS", "35830": "E", "35843": "TD", "35895": "YG", "35977": "MH", "36158": "JG", "36228": "QJ", "36426": "XQ", "36466": "DC", "36710": "JC", "36711": "ZYG", "36767": "PB", "36866": "SK", "36951": "YW", "37034": "YX", "37063": "XH", "37218": "ZC", "37325": "ZC", "38063": "PB", "38079": "TD", "38085": "QY", "38107": "DC", "38116": "TD", "38123": "YD", "38224": "HG", "38241": "XTC", "38271": "ZC", "38415": "YE", "38426": "KH", "38461": "YD", "38463": "AE", "38466": "PB", "38477": "XJ", "38518": "YT", "38551": "WK", "38585": "ZC", "38704": "XS", "38739": "LJ", "38761": "GJ", "38808": "SQ", "39048": "JG", "39049": "XJ", "39052": "HG", "39076": "CZ", "39271": "XT", "39534": "TD", "39552": "TD", "39584": "PB", "39647": "SB", "39730": "LG", "39748": "TPB", "40109": "ZQ", "40479": "ND", "40516": "HG", "40536": "HG", "40583": "QJ", "40765": "YQ", "40784": "QJ", "40840": "YK", "40863": "QJG" },
    			}
    		},
    		methods: {
    			checkCh: function(ch) {
    				var uni = ch.charCodeAt(0);
    				//如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数  
    				if (uni > 40869 || uni < 19968)
    						return ch; //dealWithOthers(ch);
    				//检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母  
    				return (this.oMultiDiff[uni] ? this.oMultiDiff[uni] : (this.strChineseFirstPY.charAt(uni - 19968)));
    			},
    			mkRslt: function(arr) {
    				var arrRslt = [""];
    				for (var i = 0, len = arr.length; i < len; i++) {
    						var str = arr[i];
    						var strlen = str.length;
    						if (strlen == 1) {
    								for (var k = 0; k < arrRslt.length; k++) {
    										arrRslt[k] += str;
    								}
    						} else {
    								var tmpArr = arrRslt.slice(0);
    								arrRslt = [];
    								for (k = 0; k < strlen; k++) {
    										//复制一个相同的arrRslt  
    										var tmp = tmpArr.slice(0);
    										//把当前字符str[k]添加到每个元素末尾  
    										for (var j = 0; j < tmp.length; j++) {
    												tmp[j] += str.charAt(k);
    										}
    										//把复制并修改后的数组连接到arrRslt上  
    										arrRslt = arrRslt.concat(tmp);
    								}
    						}
    				}
    				return arrRslt;
    			},
    			//两端去空格函数
    			trim: function (str) { 
    				return str.replace(/(^\s*)|(\s*$)/g, ""); 
    			},
    			makePy: function(str) {
    				if (typeof (str) != "string")
    						throw new Error(-1, "函数makePy需要字符串类型参数!");
    				var arrResult = new Array(); //保存中间结果的数组  
    				for (var i = 0, len = str.length; i < len; i++) {
    						//获得unicode码  
    						var ch = str.charAt(i);
    						//检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理  
    						arrResult.push(this.checkCh(ch));
    				}
    				//处理arrResult,返回所有可能的拼音首字母串数组  
    				return this.mkRslt(arrResult);
    			},
    			query: function(text) {
    				var str = this.trim(text);
    				if (!str) return;
    				var arrRslt = this.makePy(str);
    				return arrRslt;
    			}
    		}
    	}
    </script>
    

    参考
    https://ext.dcloud.net.cn/plugin?id=375
    https://ext.dcloud.net.cn/plugin?id=172

    更多相关内容
  • 安卓字母索引列表

    2018-11-07 10:45:20
    索引列表, 常用于通讯录,城市选择,选中右边的字母索引可以直接定位到相应的选项
  • 通讯录字母列表索引

    2018-02-26 21:39:38
    相信大家对这个列表字母索引已经不陌生了,在很多app中也随处可见,像没团的城市地址选择,微信联系人列表,手机通讯录…等等。既然是个这么nb这么实用的功能我们怎么能不Get到来呢,下面就让我们一起造一个出来吧
  • dor_indexing_app是用于将DOR对象索引到Argo索引中的主要API。 有关字段及其用途的更多信息,请参见: : 开发人员设置 为了在笔记本电脑上运行dor_indexing_app(例如,在运行Argo时),您需要 创建目录config/...
  • 81案例实战:陌生人社交APP的MySQL索引设计实战(一).pdf
  • 使用Redisearch作为数据存储的简单索引和可搜索的User Profile App。 该应用程序允许用户列出所有用户,添加新用户以及以最快的模式之一搜索用户。 通常,基于搜索的索引数据库或引擎非常繁重,并且需要完成许多设置...
  • 主要介绍了Android 实现带字母索引的侧边栏功能,需要的朋友可以参考下
  • 话不多说,先上效果图 数据格式 [ { "name": "A", "children": [{ "merchant_name": "阿三1", "merchant_id": 1, "name": "A" ... "merchant_name": "阿四2", ... "name...

    话不多说,先上效果图

    在这里插入图片描述

    数据格式

    [
    			{
    				"name": "A",
    				"children": [{
    					"merchant_name": "阿三1",
    					"merchant_id": 1,
    					"name": "A"
    				}, {
    					"merchant_name": "阿四2",
    					"merchant_id": 2,
    					"name": "A"
    				}, {
    					"merchant_name": "A狗桦2",
    					"merchant_id": 22,
    					"name": "A"
    				}, {
    					"merchant_name": "A狗桦3",
    					"merchant_id": 23,
    					"name": "A"
    				}]
    			}, {
    				"name": "B",
    				"children": [{
    					"merchant_name": "B暑荣3",
    					"merchant_id": 3,
    					"name": "B"
    				}, {
    					"merchant_name": "B拓4",
    					"merchant_id": 4,
    					"name": "B"
    
    				}, {
    					"merchant_name": "B秀秀秀2",
    					"merchant_id": 222,
    					"name": "B"
    				}, {
    					"merchant_name": "B秀秀秀3",
    					"merchant_id": 233,
    					"name": "B"
    				}]
    			}
    ]
    

    主要过滤数据代码部分,this.constMerchantData这是一个所有商户的数组,这是个不会改变的常量,每次过滤都是过滤这个数组

    getData() {
        this.list = this.constMerchantData.map(item => {
         var children = item.children.filter(
          item2 => item2.merchant_name.indexOf(this.vague) > -1)
         if (children.length > 0) {
          return {
           name: item.name,
           children: children
          }
         } else {
          return {
           name: "",
           children: []
          }
         }
        })
       }
    

    源码下载

    展开全文
  • 职能: 转换:旋转、翻转、改变分辨率转换:RGB 到 BW、二进制和索引图像滤波器和噪声:中值滤波器(脉冲噪声)、高斯滤波器(具有高斯法线坐标的噪声) 图像分割色度键控 报告(已知问题): - 中值过滤器在真彩色...
  • 通常我们给app端写接口都是用索引数组转成json传过去。客户端那边对数组更为友好一点。 需要注意点: $arr = [0=>1,2=>3a]; 上述数组$arr转为json会是对象形式的。 $arr = ['a','b']; 这里的$arr转为json后是数组...
  • 84案例实战:陌生人社交APP的MySQL索引设计实战(4).pdf
  • 82案例实战:陌生人社交APP的MySQL索引设计实战(二).pdf
  • 83案例实战:陌生人社交APP的MySQL索引设计实战(3).pdf
  • uni-app 写小程序 索引列表,仿微信通讯录 去uni-app官网 下载插件 indexlist <missthee-indexlist :data="carLists" placeholder='输入关键字进行查询' @select-item='selectHandler'></missthee-...

    心里认定了一个女孩 就要好好的珍惜对待她,人生不容辜负,你必须要更加努力 。加油 骚年

    uni-app 写小程序 索引列表,仿微信通讯录

    在这里插入图片描述

    去uni-app官网 下载插件 indexlist

    	<missthee-indexlist :data="carLists" placeholder='输入关键字进行查询' @select-item='selectHandler'></missthee-indexlist>
    

    carLists 就是 请求回来的数据
    在这里插入图片描述
    下载完这个插件 会有一个 missthee-indexlist.vue 文件夹 在里面修改成 你想要的样式 及 前面的头像,插件默认前面是没有头像的 自己加上 例入 在这里插入图片描述

    至此结束
    如有不足之处请指出 或直接联系邮箱 yuyong1663519276@163.com 谢谢

    展开全文
  • 行业-84案例实战:陌生人社交APP的MySQL索引设计实战(4).rar
  • 行业-83案例实战:陌生人社交APP的MySQL索引设计实战(3).rar
  • 行业-82案例实战:陌生人社交APP的MySQL索引设计实战(二).rar
  • 行业-81案例实战:陌生人社交APP的MySQL索引设计实战(一).rar
  • uuid全文索引千度搜索引擎,字典分词,分平分表,索引
  • 安卓毕业设计app源码 ONE · 一个的问题索引
  • mongodb-indexes-app 简单的NodeJS应用程序,以学习如何在MongoDB中使用索引
  • class App(object): def __init__(self): pass def _es_conn(self): es = Elasticsearch() return es def get_data(self, day,start,end): index_ = gather-apk-20180330 query_dsl = { size: 100
  • 最近需要实现一个手机通讯录的快速索引功能。根据姓名首字母快速索引功能。下面是一个手机联系人快速...import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View
  • 城市列表选择是很多app共有的功能,比如典型的美图app。那么对于React Native怎么实现呢? 要实现上面的效果,首先需要对界面的组成简单分析,界面的数据主要由当前城市,历史访问城市和热门城市组成,所以我们在...
  • 评论思路:点击的时候,写多一个评论列表,当点击发送的时候commentStatus=true,且索引等于点击的索引。同时调用获取评论列表的接口 html <view class=timestamp>{{item.timetype}} <!-- 点赞 如果islove==...
  • 自动生成页面索引 使用AppRun / Web组件构建应用程序逻辑 针对ES5或ES模块 可通过插件(WIP)扩展 快速开始 要创建一个AppRun网站: npx apprun-site init my-apprun-site cd my-apprun-site npm install 然后,您...
  • 安卓仿通讯录及微信联系人侧边栏滑动及字母索引,自定义控件,仿手机联系人 右侧滑动快速查找菜单,列表使用recyclerView,使用第三方pinyin4j-2.5.0.jar获得对应数据的首字母索引
  • 喜欢另辟蹊径的我,在这里废话不多说了,直接上代码和图片了。 效果图如下: 第一步:MainActivity的代码如下: ... import java.util.ArrayList;...import android.app.Activity; import android.graphics.Co
  • 在介绍这款工具之前,我觉得我有必要概述下什么是爬虫,或者说网络爬虫: 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页...另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
  • Google的原生的Launcher是用抽屉来装所有App的,但是抽屉真的方便吗?最近市场上流行的好多轻量级桌面都纷纷抛弃了抽屉,用Apps索引来代替。 如图: 我们来分析一下然后自己一个 1.整体可以重写RelativeLayout ...

    本文介绍Launcher中的Apps字母索引功能,什么是字母索引呢?

    Google的原生的Launcher是用抽屉来装所有App的,但是抽屉真的方便吗?最近市场上流行的好多轻量级桌面都纷纷抛弃了抽屉,用Apps索引来代替。

    如图:


    我们来分析一下然后自己做一个

    1.整体可以重写RelativeLayout

    2.右边的滑动的字母条可以重写LinearLayout

    3.中间装App的用ListView,并重写一个Item

    4.Item重写LinearLayout

    如下:


    1.AppsCustomsizeIndexView.java  整体组件

    初始化Listiew、重写BaseAdapter

    初始化自定义的AppsIndexLayout 、初始化时获取所有APP的title字段,生成字母List,里面不能有重复,然后排序,准备在AppsIndexLayout中使用。

    XML:

    <?xml version="1.0" encoding="utf-8"?>
    <com.ola.launcher.AppsCustomizeIndexView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:launcher="http://schemas.android.com/apk/res/com.ola.launcher"
        android:id="@+id/apps_customize_indexview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="visible"
        launcher:itemIconHeight="50dp"
        launcher:itemIconWidth="50dp" >//这两个属性暂时没有用,可以不加
    
        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="true"
            android:textSize="50dp" />
    
        <ListView
            android:id="@+id/apps_customize_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/textview"
            android:layout_toLeftOf="@+id/apps_customize_indexlayout"
            android:background="@null"
            android:divider="@null"
            android:scrollbars="none" >//中间装app的ListView
        </ListView>
    
        <com.ola.launcher.AppsIndexLayout
            android:id="@+id/apps_customize_indexlayout"
            android:layout_width="@dimen/apps_custom_indexview_width"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/textview"
            android:layout_marginBottom="@dimen/apps_custom_indexview_marginbottom"
            android:background="@android:color/holo_blue_dark" >
        </com.ola.launcher.AppsIndexLayout>//右边的字母条
    
    </com.ola.launcher.AppsCustomizeIndexView>

    代码:

    public class AppsCustomizeIndexView extends RelativeLayout implements ScrollListener {
    
    	private TextView mTextView;
    	private AppsIndexLayout mIndexLayout;//字母条
    	private ListView mListView;
    	private AppsAdapter mAppsAdapter;
    	private ArrayList<String> mKeys = new ArrayList<String>();//字母条需要的数据
    	private HashMap<String, ArrayList<ApplicationInfo>> mKeyItem = new HashMap<String, ArrayList<ApplicationInfo>>();//app数据
    	private ArrayList<ApplicationInfo> mIndexApps = new ArrayList<ApplicationInfo>();//零时装app的List
    	private ArrayList<ApplicationInfo> mApplicationInfos;
    	String mEmpty = "";
    	String mRencent = "⊙";
    	String mOther = "#";
    
    	public AppsCustomizeIndexView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    	}
    
    	public AppsCustomizeIndexView(Context context) {
    		super(context);
    	}
    
    	protected void onFinishInflate() {
    		// TODO Auto-generated method stub
    		super.onFinishInflate();
    		mIndexLayout = (AppsIndexLayout) findViewById(R.id.apps_customize_indexlayout);
    		mListView = (ListView) findViewById(R.id.apps_customize_listview);
    		mIndexLayout.setOnScrollListener(this);
    		mTextView = (TextView) findViewById(R.id.textview);
    
    	}
    
    	@SuppressLint("ClickableViewAccessibility")
    	public boolean onTouchEvent(MotionEvent event) {
    		return true;
    	}
    
    	private void setTestText(String s) {
    		mTextView.setText(s);
    	}
    
    	public void setDate(ArrayList<ApplicationInfo> infos) {
    		this.mApplicationInfos = infos;
    		setTestText(mApplicationInfos.size() + "");
    		mKeys = getKeyFromApps();
    		mIndexLayout.setDate(mKeys);
    		mAppsAdapter = new AppsAdapter(mKeys, mKeyItem, getContext());
    		mListView.setAdapter(mAppsAdapter);
    
    	}
    
    	@SuppressLint("DefaultLocale")//通过遍历所有AppsList的App的title字段,取出第一个字符,生成一个List
    	private ArrayList<String> getKeyFromApps() {
    		ArrayList<String> mIndexKey = new ArrayList<String>();
    		String language = Locale.getDefault().getLanguage();
    		Pattern pattern = Pattern.compile("^[A-Za-z]+$");
    		for (int i = 0; i < mApplicationInfos.size(); i++) {
    			String key = mApplicationInfos.get(i).title.toString().trim().toUpperCase().charAt(0) + mEmpty;
    			if (pattern.matcher(key).matches()) {//匹配大小写英文字母
    				if (!mIndexKey.contains(key)) {
    					mIndexKey.add(key);
    					mIndexApps = new ArrayList<ApplicationInfo>();
    					mKeyItem.put(key, mIndexApps);
    				} else {
    					mIndexApps = mKeyItem.get(key);
    				}
    				if (mIndexApps != null) {
    					mIndexApps.add(mApplicationInfos.get(i));
    				}
    			} else {
    				if (Locale.CHINA.getLanguage().equalsIgnoreCase(language)) {
    					char c = key.toCharArray()[0];
    					if (Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(Character.UnicodeBlock.of(c))) {
    	                                        //中文时候的处理、还有其他语言考虑
    
    					} else {
    						addOther(mIndexKey, mKeyItem, mApplicationInfos.get(i), mOther);//乱码时候处理
    					}
    				} else {
    					String o = key;
    					if (!mIndexKey.contains(o)) {
    						mIndexKey.add(o);
    						mIndexApps = new ArrayList<ApplicationInfo>();
    						mKeyItem.put(o, mIndexApps);
    					} else {
    						mIndexApps = mKeyItem.get(o);
    					}
    					if (mIndexApps != null) {
    						mIndexApps.add(mApplicationInfos.get(i));
    					}
    				}
    			}
    		}
    		// mIndexKey.add(mRencent);
    		// mIndexKey.add(mOther);
    		Collections.sort(mIndexKey);
    		addOther(mIndexKey, mKeyItem, mApplicationInfos.get(0), mOther);
    		addOther(mIndexKey, mKeyItem, mApplicationInfos.get(0), mRencent);
    		return mIndexKey;
    	}
    
    	@Override
    	public void onDrag(String key) {
    		mListView.setSelection(findPosFromList(key));
    	}
    
    	private void addOther(ArrayList<String> keystrings, HashMap<String, ArrayList<ApplicationInfo>> keyitem,
    			ApplicationInfo apps, String string) {
    		ArrayList<ApplicationInfo> mInfos;
    		if (!keystrings.contains(string)) {
    			keystrings.add(0, string);
    			mInfos = new ArrayList<ApplicationInfo>();
    			keyitem.put(string, mInfos);
    		} else {
    			mInfos = keyitem.get(string);
    
    		}
    		if (mInfos != null) {
    			mInfos.add(apps);
    		}
    
    	}
    
    	public int findPosFromList(String key) {
    		for (int i = 0; i < mKeys.size(); i++) {
    			if (key.equals(mKeys.get(i))) {
    				return i;
    			}
    		}
    		return 0;
    	}
    
    	class AppsAdapter extends BaseAdapter {
    		private ArrayList<String> stringsArray;
    		private HashMap<String, ArrayList<ApplicationInfo>> mKeyItem;
    		Context context;
    
    		public AppsAdapter(ArrayList<String> stringsArray, HashMap<String, ArrayList<ApplicationInfo>> mKeyItem, Context context) {
    			this.stringsArray = stringsArray;
    			this.context = context;
    			this.mKeyItem = mKeyItem;
    		}
    
    		@Override
    		public int getCount() {
    			return stringsArray.size();
    		}
    
    		@Override
    		public Object getItem(int position) {
    			return null;
    		}
    
    		@Override
    		public long getItemId(int position) {
    			return 0;
    		}
    
    		@SuppressLint("InflateParams")
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    
    			if (convertView == null) {
    				convertView = LayoutInflater.from(context).inflate(R.layout.apps_customize_indexview_item, null);
    			}
    			((AppsCustomizeIndexViewItemLayout) convertView).setKeyString(stringsArray.get(position).toString());
    			((AppsCustomizeIndexViewItemLayout) convertView).setMeasure(mKeyItem.get(stringsArray.get(position)).size());
    			((AppsCustomizeIndexViewItemLayout) convertView).setContent(mKeyItem.get(stringsArray.get(position)));
    			return convertView;
    		}
    
    	}
    
    }

    2.AppsIndexLayout.java 右边的字母条组件

    我们来分析一下:

    仅仅是显示一排字母的话,我们就让他继承LinearLayout,并且设置排列方式为竖直,然后在LinearLayout中添加上若干个TextView就可以,用TextView来显示具体的字母。

    再自己定义一个接口ScrollListener,用来在触摸事件中去触发该接口的方法并传递参数,通过该方法去控制另外组件的状态变化

    触摸过程中调用接口的方法,并且计算位置,让触摸周围的TexView高亮显示

    java:

    public class AppsIndexLayout extends LinearLayout {
    
    	public ScrollListener mDragListener;
    	private ArrayList<String> mIndexKey;
    	private TextView mTextView;
    	private int mViewHeight;
    	private Rect mHitRect = new Rect();
    	private String mColor3 = "#B8B3AE";
    	private String mColor2 = "#C7C5BD";
    	private String mColor1 = "#FFFFFF";
    
    	public AppsIndexLayout(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		setOrientation(VERTICAL);
    		setGravity(Gravity.CENTER_HORIZONTAL);
    
    	}
    
    	// @Override
    	// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    	// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    	// int result_w = mearWidth(widthMeasureSpec);
    	// int result_h = mearHeight(heightMeasureSpec);
    	//
    	// setMeasuredDimension(result_w, result_h);
    	// }
    
    	// private int mearWidth(int widthMeasureSpec) {
    	// int result = 0;
    	// int specMode = MeasureSpec.getMode(widthMeasureSpec);
    	// int spacSize = MeasureSpec.getSize(widthMeasureSpec);
    	// if (specMode == MeasureSpec.EXACTLY) {
    	// result = spacSize;
    	// } else {
    	// result = getResources().getInteger(R.dimen.apps_custom_indexview_width);
    	// if (specMode == MeasureSpec.AT_MOST) {
    	// result = Math.min(result, spacSize);
    	// }
    	// }
    	// return result;
    	// }
    
    	// private int mearHeight(int heightMeasureSpec) {
    	// int result = 0;
    	// int specMode = MeasureSpec.getMode(heightMeasureSpec);
    	// int spacSize = MeasureSpec.getSize(heightMeasureSpec);
    	// if (specMode == MeasureSpec.EXACTLY) {
    	// result = spacSize;
    	// } else {
    	// result = getResources().getDisplayMetrics().heightPixels;
    	// if (specMode == MeasureSpec.AT_MOST) {
    	// result = Math.min(result, spacSize);
    	// }
    	// }
    	// mViewHeight = result;
    	// return result;
    	// }
    
    	public void setDate(ArrayList<String> indexkey) {
    		int h = getResources().getDisplayMetrics().heightPixels;
    		mIndexKey = indexkey;
    		LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, h / (indexkey.size() + 6));
    		for (int i = 0; i < mIndexKey.size(); i++) {
    			TextView textView = new TextView(getContext());
    			textView.setGravity(Gravity.CENTER);
    			textView.setTextSize(12);
    			textView.setText(mIndexKey.get(i).toString());
    			addView(textView, layoutParams);
    		}
    
    	}
    
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    		switch (event.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    		case MotionEvent.ACTION_UP:
    		case MotionEvent.ACTION_MOVE:
    		default:
    			getKeyString(event);
    			break;
    		}
    		return true;
    	}
    
    	private void getKeyString(MotionEvent event) {
    		int x = (int) event.getX();
    		int y = (int) event.getY();
    		for (int i = 0; i < getChildCount(); i++) {
    			if (getViewByEvent(x, y, getChildAt(i))) {
    				((TextView) getChildAt(i)).setTextColor(Color.parseColor(mColor1));
    				mDragListener.onDrag(((TextView) getChildAt(i)).getText().toString());//调用接口的方法,参数传递我们当前的TextView的文本
    				if (i + 1 < getChildCount()) {
    					((TextView) getChildAt(i + 1)).setTextColor(Color.parseColor(mColor1));//计算触摸时的TextView位置,在越界的情况下让其上下的都高亮显示
    					for (int j = i + 2; j < getChildCount(); j++) {
    						((TextView) getChildAt(j)).setTextColor(Color.parseColor(mColor2));
    					}
    				}
    				if (i - 1 > 0) {
    
    					((TextView) getChildAt(i - 1)).setTextColor(Color.parseColor(mColor1));
    					for (int j = 0; j < i - 2; j++) {
    						((TextView) getChildAt(j)).setTextColor(Color.parseColor(mColor2));
    
    					}
    				}
    
    			}
    		}
    	}
    
    	private boolean getViewByEvent(int x, int y, View v) {
    		v.getHitRect(mHitRect);
    		int i = (mHitRect.left + mHitRect.right) / 2;
    		return mHitRect.contains(i, y);
    	}
    
    	public void addChild(TextView view) {
    		addView(view);
    	}
    
    	public void setOnScrollListener(ScrollListener dragListener) {
    		this.mDragListener = dragListener;
    	}
    
    	interface ScrollListener {
    		public void onDrag(String key);
    	}
    }

    3.AppsCustomsizeIndexViewItemLayout.java 

    ListView中的高矮不一的Item,里面显示大字母的TextView,显示具体App的GridLayout

    GridLayout可以设置行列

    Xml:apps_customsize_indexview_item

    <?xml version="1.0" encoding="utf-8"?>
    <com.ola.launcher.AppsCustomizeIndexViewItemLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_orange_light" >
    
        <TextView
            android:id="@+id/apps_index_item_key"
            android:layout_width="@dimen/apps_custom_indexview_key_width"
            android:layout_height="@dimen/apps_custom_indexview_key_height"
            android:layout_marginLeft="@dimen/apps_custom_indexview_key_marginleft"
            android:layout_marginTop="@dimen/apps_custom_indexview_key_margintop"
            android:background="@drawable/apps_index_item_key_bg"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:textSize="@dimen/apps_custom_indexview_key_textsize" />
    
        <!-- <GridLayout
            android:id="@+id/apps_index_item_grid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </GridLayout> -->
    
    </com.ola.launcher.AppsCustomizeIndexViewItemLayout>

    Java:

    public class AppsCustomizeIndexViewItemLayout extends LinearLayout implements OnClickListener {
    
    	private TextView mKeyView;
    	private GridLayout mAppsGridLayout;
    	private int mGridCellX = 4;
    	Launcher mLauncher;
    	private IconCache mIconCache;
    
    	public AppsCustomizeIndexViewItemLayout(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		mLauncher = (Launcher) context;
    		mIconCache = ((LauncherApplication) context.getApplicationContext()).getIconCache();
    	}
    
    	@Override
    	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    	}
    
    	private int onMeasureWidth(int widthMeasureSpec) {
    		int result = 0;
    		int specMode = MeasureSpec.getMode(widthMeasureSpec);
    		int specSize = MeasureSpec.getSize(widthMeasureSpec);
    		if (specMode == MeasureSpec.EXACTLY) {
    			result = specSize;
    		} else {
    			result = specSize;
    		}
    		return result;
    	}
    
    	private int onMeasureHeight(int heightMeasureSpaec) {
    		int result = 0;
    		int specMode = MeasureSpec.getMode(heightMeasureSpaec);
    		int spacSize = MeasureSpec.getSize(heightMeasureSpaec);
    		if (specMode == MeasureSpec.EXACTLY) {
    			result = spacSize;
    		} else {
    			result = spacSize;
    		}
    		return result;
    	}
    
    	@Override
    	protected void onFinishInflate() {
    		super.onFinishInflate();
    		mKeyView = (TextView) findViewById(R.id.apps_index_item_key);
    		// mAppsGridLayout = (GridLayout)
    		// findViewById(R.id.apps_index_item_grid);
    		mAppsGridLayout = new GridLayout(getContext());
    		mAppsGridLayout.setColumnCount(mGridCellX);
    		addView(mAppsGridLayout);
    
    	}
    
    	public void setKeyString(String key) {
    		mKeyView.setText(key);
    	}
    
    	public void setGridBackground(int c) {
    		mAppsGridLayout.setBackgroundColor(c);
    	}
    
    	public void setMeasure(int count) {
    
    	}
    
    	public void setContent(ArrayList<ApplicationInfo> infos) {
    		mAppsGridLayout.removeAllViews();
    		IconTextView itemView;
    		for (int i = 0; i < infos.size(); i++) {
    			// itemView = (PagedViewIcon)
    			// LayoutInflater.from(getContext()).inflate(R.layout.apps_customize_application,
    			// null);
    			itemView = new IconTextView(getContext());
    			// itemView.applyFromApplicationInfo(infos.get(i), true, null);
    			itemView.setIcon(new FastBitmapDrawable(infos.get(i).iconBitmap));
    			itemView.setText(infos.get(i).title);
    			// itemView.setOnClickListener(this);
    			mAppsGridLayout.addView(itemView, Math.min(1, mAppsGridLayout.getChildCount()), new LayoutParams(140, 200));
    		}
    	}
    
    	@Override
    	public void onClick(View v) {
    		ApplicationInfo info = (ApplicationInfo) v.getTag();
    		startActivity(info, v);
    	}
    
    	public void startActivity(ApplicationInfo info, View v) {
    		final Intent intent = info.intent;
    		int[] pos = new int[2];
    		v.getLocationOnScreen(pos);
    		intent.setSourceBounds(new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1] + v.getHeight()));
    		if (!mLauncher.startActivitySafely(v, intent, null)) {
    
    		}
    	}
    
    	class IconTextView extends TextView {//显示AppItem View
    
    		public IconTextView(Context context) {
    			super(context);
    			setGravity(Gravity.CENTER_HORIZONTAL);
    			setPadding(10, 20, 10, 10);
    
    			// setTextColor(Color.BLACK);
    		}
    
    		public void setIcon(Drawable d) {
    			setCompoundDrawablesWithIntrinsicBounds(null, d, null, null);//TextView上下左右设置图片的,这里我们只给top设置
    		}
    	}
    
    }

    最后们来看看功能的实现效果:




    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,571
精华内容 63,028
关键字:

做索引的app