Authored by yoho-js001

修复index不准的问题。 reviewed by 凯总。

@@ -53,7 +53,7 @@ export default class Brand extends Component { @@ -53,7 +53,7 @@ export default class Brand extends Component {
53 if (item) { 53 if (item) {
54 if (!item.y) { 54 if (!item.y) {
55 this.needScrollSection = sectionID; 55 this.needScrollSection = sectionID;
56 - item.y = ScrollY(sectionID,this.sectionData); 56 + item.y = ScrollCount(sectionID,this.sectionData);
57 this.props.setBrandData && this.props.setBrandData(this.sectionDataKey, this.props.selectedChannelId); 57 this.props.setBrandData && this.props.setBrandData(this.sectionDataKey, this.props.selectedChannelId);
58 this.listView && this.listView.scrollTo({x: 0, y: item.y, animated: false}); 58 this.listView && this.listView.scrollTo({x: 0, y: item.y, animated: false});
59 } else { 59 } else {
@@ -4,6 +4,7 @@ import React from 'react'; @@ -4,6 +4,7 @@ import React from 'react';
4 import ReactNative from 'react-native'; 4 import ReactNative from 'react-native';
5 import {isEmptyObject} from '../../utils/Utils'; 5 import {isEmptyObject} from '../../utils/Utils';
6 import Immutable, {Map} from 'immutable'; 6 import Immutable, {Map} from 'immutable';
  7 +import * as _ from 'lodash';
7 8
8 const { 9 const {
9 View, 10 View,
@@ -19,6 +20,10 @@ export default class IndexListView extends React.Component { @@ -19,6 +20,10 @@ export default class IndexListView extends React.Component {
19 constructor(props) { 20 constructor(props) {
20 super (props); 21 super (props);
21 this.onTouchMove = this.onTouchMove.bind(this); 22 this.onTouchMove = this.onTouchMove.bind(this);
  23 +
  24 + this.state = {
  25 + list:[]
  26 + };
22 } 27 }
23 28
24 shouldComponentUpdate(nextProps){ 29 shouldComponentUpdate(nextProps){
@@ -31,16 +36,26 @@ export default class IndexListView extends React.Component { @@ -31,16 +36,26 @@ export default class IndexListView extends React.Component {
31 36
32 onTouchMove(e) { 37 onTouchMove(e) {
33 let {dataSource} = this.props; 38 let {dataSource} = this.props;
34 - let Y = e.nativeEvent.pageY - Math.ceil((viewHeight - dataSource.length * (itemHeight+2))/2) - 8-28;  
35 - var index = Math.ceil(Y/(itemHeight+2))-1;  
36 - if (dataSource.length - index < 4) {  
37 - return;  
38 - }  
39 - let sectionID = dataSource[index];  
40 - if (!sectionID) {  
41 - return; 39 + let Y = e.nativeEvent.pageY;
  40 + for (var i = 0; i < this.state.list.length; i++) {
  41 + if (Y > this.state.list[i].y && Y < this.state.list[i].y + 12) {
  42 + let name = this.state.list[i].name;
  43 + if (name == '0') {
  44 + name = '0-9';
  45 + }
  46 + console.log(name);
  47 + this.props.onLetterPress && this.props.onLetterPress(i,name);
  48 + break;
  49 + }
42 } 50 }
43 - this.props.onLetterPress && this.props.onLetterPress(index,sectionID); 51 + }
  52 +
  53 + onLayout(name,e) {
  54 + let {y} = e.nativeEvent.layout;
  55 + let Y = {'name':name,'y':y}
  56 + let list = this.state.list;
  57 + list.push(Y);
  58 + this.setState(list)
44 } 59 }
45 60
46 render() { 61 render() {
@@ -58,7 +73,9 @@ export default class IndexListView extends React.Component { @@ -58,7 +73,9 @@ export default class IndexListView extends React.Component {
58 if (name == '0-9') { 73 if (name == '0-9') {
59 name = '0'; 74 name = '0';
60 } 75 }
61 - keyData.push(<Text key={i} style={styles.text}>{name}</Text>); 76 +
  77 +
  78 + keyData.push(<View key={i} style={styles.TV} onLayout={this.onLayout.bind(this, name)}><Text style={styles.text}>{name}</Text></View>);
62 } 79 }
63 80
64 return ( 81 return (
@@ -71,7 +88,7 @@ export default class IndexListView extends React.Component { @@ -71,7 +88,7 @@ export default class IndexListView extends React.Component {
71 88
72 let {width, height} = Dimensions.get('window'); 89 let {width, height} = Dimensions.get('window');
73 let itemHeight = 12; 90 let itemHeight = 12;
74 -let viewHeight = height - 112; 91 +let viewHeight = height - 64;
75 92
76 let styles = StyleSheet.create({ 93 let styles = StyleSheet.create({
77 container: { 94 container: {
@@ -80,17 +97,24 @@ let styles = StyleSheet.create({ @@ -80,17 +97,24 @@ let styles = StyleSheet.create({
80 height: viewHeight, 97 height: viewHeight,
81 bottom : 1, 98 bottom : 1,
82 right: 1, 99 right: 1,
83 - backgroundColor: 'rgba(255,255,255,0.2)', 100 + backgroundColor: 'red',
84 alignItems: 'center', 101 alignItems: 'center',
85 justifyContent: 'center', 102 justifyContent: 'center',
86 }, 103 },
  104 + TV: {
  105 + width: 12,
  106 + height: 12,
  107 + backgroundColor: 'transparent',
  108 + marginTop: 2,
  109 + justifyContent: 'center',
  110 + },
87 text: { 111 text: {
88 justifyContent: 'center', 112 justifyContent: 'center',
89 textAlign: 'center', 113 textAlign: 'center',
90 fontSize: 11, 114 fontSize: 11,
91 color: 'black', 115 color: 'black',
92 backgroundColor: 'transparent', 116 backgroundColor: 'transparent',
93 - marginTop: 2, 117 +
94 fontWeight: 'bold', 118 fontWeight: 'bold',
95 }, 119 },
96 image: { 120 image: {