1

Consider a simple app in React Native that fetches listings from a remote JSON source and displays them on screen.

So far,I've managed to get the results to display using the ListView components in rows (i.e. 2 result per row, see screenshot).

I have managed to create a gridview .But couldn't get the list to return two data

in one row.both the grids display data of a single person,i want details in a consecutive manner not repeating.

        </Content>
          <View style={{backgroundColor: 'white'}}>
           <Text style={{color: 'black',fontSize: 17,marginTop: 25,marginLeft: 15}}>Employees</Text>
          </View>
          <List dataArray={currentContext.props.employeeList}
            renderRow={(data) =>
              <ListItem>
                {this.renderRow(data)}
              </ListItem>
           } />
          </Content>

The function renderRow(data) is given by

renderRow(data){
  return(
    typeOne()
  )
  function typeOne(){
    return(
      <View style={styles.gridContainer}>
        <Content contentContainerStyle={{
            padding:6,
            paddingBottom:0
          }}>
        <View style={{flex:1,}}>
            <Row>
              {renderCell(data.photo_url, 0,data.name)}
              {renderCell(data.photo_url, 1,data.name)}
            </Row>
        </View>
          </Content>
      </View>
    )
   function renderCell(bg,pos,title){
      if (pos%2==0) {
        return(
          <Col style={[{marginRight:3},styles.colStyle]}>
            {cellContent(bg,title)}
          </Col>
        )
      }else{
        return(
          <Col style={[{marginLeft:3},styles.colStyle]}>
            {cellContent(bg,title)}
          </Col>
        )
      }
      function cellContent(bg,title){
        if(bg==null){
          return null
        }
        return(
          <Button style={{flex:1,alignSelf:'stretch'}} underLayouColor='red'>
            <View style={styles.cellContent}>
              <Image style={{height:230,alignItems: 'stretch'}} source={{uri:bg}} blurRadius={1}/>
              <View style={[styles.cellTitleBg,{opacity: 0.5,marginTop: 10}]}>
              <Text style={[styles.cellTitle,{position:'absolute',bottom:0,right:5}]}>{title}</Text>
              </View>
            </View>
          </Button>
        )
      }
    }
  }
}

How can get the list-view to return 2 data's per row ?

I will give you similar question for reference in the below link

ListView grid in React Native

please help me solve this issue.

The style part

const styles = StyleSheet.create({
    container: {
        flex:1,
        backgroundColor:'white',
    },
    button:{
        color:'white'
    },
    overLayView: {
        position:'absolute',
        alignSelf:'center',

    },
    gridContainer: {backgroundColor:'#EDF0F2',flex:1,},
    colStyle:{height:210,flex:1,marginBottom:6,marginRight:10,marginLeft:10},
    cellContent:{position:'absolute',left:0,right:0,top:0,bottom:0},
    cellTitleBg:{bottom:65,backgroundColor:'#778899',height:35},
    cellTitle:{bottom:65,color:'white',fontWeight:'bold',fontSize:17,right:0,textAlign:'right',right:0}
})
Amal p
  • 2,882
  • 4
  • 29
  • 49

2 Answers2

0

Maybe use a wrapper library, I recommend this one: https://www.npmjs.com/package/react-native-easy-listview-gridview

RJiryes
  • 951
  • 10
  • 25
0

Try this out...

pass index from the renderRow function down to this function where this view is defined.

<Button key={index} style={{flex:1,alignSelf:'stretch'}} underLayouColor='red'>
            <View key={index} style={styles.cellContent}>
              <Image key={index} style={{height:230,alignItems: 'stretch'}} source={{uri:bg}} blurRadius={1}/>
              <View key={index} style={[styles.cellTitleBg,{opacity: 0.5,marginTop: 10}]}>
              <Text key={index} style={[styles.cellTitle,{position:'absolute',bottom:0,right:5}]}>{title}</Text>
              </View>
            </View>
          </Button>
Codesingh
  • 3,316
  • 1
  • 11
  • 18