2016-03-15 12 views
7

Tôi không thể tìm ra cách sử dụng renderRow của thuộc tính ListView highlightRow.Làm cách nào để gọi highlightRow của ListView.renderRow()?

Các ListView.renderRow Documentation bang ...

(hàngDữ liệu, sectionid, ROWID, highlightRow) => renderable

Takes a nhập dữ liệu từ các nguồn dữ liệu và id của nó và phải trả lại một renderable thành phần được hiển thị dưới dạng hàng. Theo mặc định dữ liệu là chính xác những gì đã được đưa vào nguồn dữ liệu, nhưng nó cũng có thể cung cấp các trình giải nén tùy chỉnh. ListView có thể được thông báo khi một hàng được đánh dấu bằng cách gọi hàm highlightRow. Các dấu phân tách ở trên và dưới sẽ bị ẩn khi một hàng được tô sáng. Trạng thái được đánh dấu của một hàng có thể được đặt lại bằng cách gọi highlightRow (null).

Tôi muốn kêu gọi sự chú ý đến dòng ...

ListView có thể được thông báo khi liên tiếp được nhấn mạnh bằng cách gọi highlightRow chức năng.

khi tôi console.log(rowData, sectionID, rowID, highlightedRow), tôi có thể thấy rằng highlightedRow là một chức năng với chữ ký sau đây ...

function(sectionID,rowID){ 
    this.setState({highlightedRow:{sectionID:sectionID,rowID:rowID}}); 
} 

được gọi là từ here in the source code (xem this.onRowHighlighted) ...

<StaticRenderer 
    key={'r_' + comboID} 
    shouldUpdate={!!shouldUpdateRow} 
    render={this.props.renderRow.bind(
    null, 
    dataSource.getRowData(sectionIdx, rowIdx), 
    sectionID, 
    rowID, 
    this.onRowHighlighted 
)} 
/>; 

Có ai có thể cung cấp ví dụ về cách sử dụng highlightRow chính xác không?

Trả lời

4

Sau khi điều tra thuộc tính trạng thái highlightedRow trạng thái trong mã ListView, tôi đã thấy rằng nó chỉ được sử dụng để tính tham số adjacentRowHighlighted được chuyển đến phương thức renderSeparator.

(sectionid, ROWID, adjacentRowHighlighted) => renderable

Nếu được cung cấp, một thành phần renderable để được trả lại như tách bên dưới mỗi hàng nhưng không phải là hàng cuối cùng nếu có một tiêu đề phần phía dưới. Lấy một sectionID và rowID của hàng bên trên và liệu hàng liền kề của nó có được đánh dấu hay không.

Vì vậy, tôi tin rằng trường hợp sử dụng duy nhất cho highlightRow sẽ hiển thị một dấu phân cách khác cho các hàng được đánh dấu. Dưới đây là một ví dụ đơn giản thay đổi màu nền của dải phân cách dựa trên đối số adjacentRowHighlighted.

<ListView 
    renderRow={(rowData, sectionID, rowID, highlightRow) { 
    return (
     <View> 
     <TouchableOpacity 
      onPress={() => highlightRow(sectionID, rowID) 
     > 
      {row content here} 
     </TouchableOpacity> 
     </View> 
    ); 
    }} 
    renderSeparator={(sectionID, rowID, adjacentRowHighlighted) => { 
    return (
     <View 
     key={`${sectionID}-${rowID}`} 
     style={{ 
      height: 1, 
      backgroundColor: adjacentRowHighlighted ? 'blue' : 'red', 
     }} 
     /> 
    ); 
    }} 
/> 
+0

@halib, tôi chắc chắn bạn đang đi đúng hướng, nhưng tôi không thể làm ví dụ của bạn hoạt động. Tôi đang đào sâu vào, nhưng bạn đã tình cờ có thể tự mình kiểm tra xem liệu nó có thực sự hoạt động không? –

+0

BTW, tôi đặt một bản sao lên trên rnplay của nơi tôi ngay bây giờ. Nó sẽ là tuyệt vời nếu bạn muốn ngã ba nó và giúp tôi làm cho nó hoạt động https://rnplay.org/apps/FW4-Aw –

+0

@ChrisGeirman, vấn đề là với chiều rộng phân cách. nó không thể được tính toán như chiều rộng của hàng và listview không được xác định. Thêm thứ gì đó như chiều rộng: 200; style cho ListView sẽ sửa nó: https: // rnplay.org/apps/Bs9wZQ – halilb

Các vấn đề liên quan