Titanium JIRA Archive
Titanium SDK/CLI (TIMOB)

[TIMOB-13686] Android: Implement remaining ListView v2 features (excluding search)

GitHub Issuen/a
TypeSub-task
PriorityMedium
StatusClosed
ResolutionFixed
Resolution Date2013-10-17T21:38:52.000+0000
Affected Version/sn/a
Fix Version/s2013 Sprint 21, 2013 Sprint 21 API, Release 3.2.0
ComponentsAndroid
Labelsn/a
ReporterHieu Pham
AssigneeHieu Pham
Created2013-04-26T17:16:29.000+0000
Updated2017-03-16T22:26:20.000+0000

Description

Implementing the remaining ListView v2 features (excluding search and pull to refresh): 1. ListView header/footerView 2. ListSection header/footerView 4. ListView properties: separatorColor 5. ListItem properties: selectedBackgroundColor, selectedBackgroundImage, backgroundImage, backgroundGradient Testing steps: 1. Test code for ListView header/footerView and separatorColor:
var win = Ti.UI.createWindow({backgroundColor: 'blue', fullscreen: false});

var view1 = Ti.UI.createView({height: 100, backgroundColor: "green"});
var button = Ti.UI.createButton({title: "click me"});
view1.add(button);
button.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button1");
});  

view1.addEventListener('click', function(e) {
   Ti.API.log("you clicked headerView");
});

var view2 = Ti.UI.createView({height: 100, backgroundColor: "blue"});
var button2 = Ti.UI.createButton({title: "click me"});
view2.add(button2);
button2.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button2");
});  

view2.addEventListener('click', function(e) {
   Ti.API.log("you clicked footerView");
});

var section1 = Ti.UI.createListSection();
var list = Ti.UI.createListView({separatorColor: 'blue', headerView: view1, footerView: view2, backgroundColor: 'white', sections:[section1]});
var item =  {properties: {title: "hi", backgroundColor: "yellow", backgroundSelectedColor: "blue", accessoryType: 1, image: "appicon.png", color: "blue", font: {fontSize: "20sp"} }};
addItems(0, 20, item, section1);
item.properties.image = "KS_nav_ui.png";
win.add(list);
    
 
win.open();
    
function addItems(index, count, item, section) {
	for (var i = index; i < index + count; i++) {
        item.properties.title = "Label " + i;
    	section.appendItems([item]);
    }
}

1. Run code, you should see headerView, footerView and blue separator lines. Test case for section header/footerView and listView header/footerView:
var win = Ti.UI.createWindow({backgroundColor: 'yellow', fullscreen: false});
 
var view1 = Ti.UI.createView({height: '200dp', backgroundColor: "green"});
var button = Ti.UI.createButton({title: "change height to 100dp"});
view1.add(button);
button.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button1");
   view1.height = '100dp';
   });  

view1.addEventListener('click', function(e) {
   Ti.API.log("you clicked headerView");
});
 
var view2 = Ti.UI.createView({height: '200dp', backgroundColor: "red"});
var button2 = Ti.UI.createButton({title: "change height to 100dp"});
view2.add(button2);
button2.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button2");
   view2.height = '100dp';
});  

var view3 = Ti.UI.createView({height: '100dp', backgroundColor: "blue"});
var button3 = Ti.UI.createButton({title: "change height to 200dp"});
view3.add(button3);
button3.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button3");
   view3.height = '200dp';
}); 

var view4 = Ti.UI.createView({height: '100dp', backgroundColor: "purple"});
var button4 = Ti.UI.createButton({title: "change height to 200dp"});
view4.add(button4);
button4.addEventListener('click', function(e) {
   Ti.API.log("you clicked on button4");
   view4.height = '200dp';
}); 
win.open();

var section1 = Ti.UI.createListSection({headerView: view1, footerView: view2});
var list = Ti.UI.createListView({headerView: view3, footerView: view4, separatorColor: 'blue', backgroundColor: 'white', sections:[section1]});
var item =  {properties: {title: "hi", backgroundColor: "yellow", backgroundSelectedColor: "blue", accessoryType: 1, image: "appicon.png", color: "blue", font: {fontSize: "20sp"} }};
addItems(0, 20, item, section1);
item.properties.image = "KS_nav_ui.png";

win.add(list);

function addItems(index, count, item, section) {
    for (var i = index; i < index + count; i++) {
        item.properties.title = "Label " + i;
        section.appendItems([item]);
    }
}
1. Run code, make sure button's functionality is correct. Observe log for clicks. Test case for selectedBackgroundImage, selectedBackgroundColor, and backgroundGradient, backgroundImage
var myTemplate1 = {
  properties: {
    backgroundColor: 'blue',
    height: '100sp'
  },
  childTemplates: [
  {
    type: 'Ti.UI.Label',
    bindId:'cellLabel',
    properties: {
      font: {fontSize: '12dp'},
      text: "Hello"
    }
  }]
};

var section = Ti.UI.createListSection({headerTitle: "Header 1"});
var data = [];

for (var i = 0; i < 4; i++) {
    var item = {
        properties: {selectedBackgroundColor: "green"},
    	cellLabel: {text: "selectedBackgroundColor: green"}
    };
    if (i == 1) {
        item.properties = {selectedBackgroundImage: "appicon.png"};
    	item.cellLabel.text = "selectedBackgroundImage: appicon";
    } else if (i == 2) {
        item.properties = {
        	backgroundGradient: {
        		type: 'linear',
        		startPoint: { x: '0%', y: '50%' },
        		endPoint: { x: '100%', y: '50%' },
        		colors: [ { color: 'red', offset: 0.0}, { color: 'blue', offset: 0.25 }, { color: 'red', offset: 1.0 } ],
    		}
    	};
    	item.cellLabel.text = "backgroundGradient";
    } else if (i==3) {
    	item.properties = {backgroundImage: "KS_nav_ui.png", selectedBackgroundImage: "appicon.png"};
    	item.cellLabel.text = "backgroundImage: KS_nav_ui, selectedBackgroundImage: appicon";
    }
    data.push(item);
}

section.setItems(data);

var listView = Ti.UI.createListView({defaultItemTemplate: 'myTemp', templates: {myTemp: myTemplate1}, backgroundColor: "white", sections: [section]});

var win = Ti.UI.createWindow();
win.add(listView);
win.open();

Comments

  1. Darren Haligas 2013-09-11

    What is the status of this? We really need all the listview features done. it is such a performance boost.
  2. Hieu Pham 2013-09-27

    master PR #1: https://github.com/appcelerator/titanium_mobile/pull/4747
  3. Ping Wang 2013-09-27

    Modified test code for step 1:
       var win = Ti.UI.createWindow({backgroundColor: 'blue', fullscreen: false});
       var section1 = Ti.UI.createListSection();
        
       var view1 = Ti.UI.createView({height: 100, backgroundColor: "green"});
       var button = Ti.UI.createButton({title: "turn on canScroll"});
       view1.add(button);
       button.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button1");
          list.setCanScroll(true);
       });  
        
       view1.addEventListener('click', function(e) {
          Ti.API.log("you clicked headerView");
       });
        
       var view2 = Ti.UI.createView({height: 100, backgroundColor: "blue"});
       var button2 = Ti.UI.createButton({title: "turn off canScroll"});
       view2.add(button2);
       button2.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button2");
          list.canScroll = false;
       });  
        
       view2.addEventListener('click', function(e) {
          Ti.API.log("you clicked footerView");
       });
        
        
       var list = Ti.UI.createListView({canScroll: false, separatorColor: 'blue', headerView: view1, footerView: view2, backgroundColor: 'white', sections:[section1]});
       var item =  {properties: {title: "hi", backgroundColor: "yellow", backgroundSelectedColor: "blue", accessoryType: 1, image: "appicon.png", color: "blue", font: {fontSize: "20sp"} }};
       addItems(0, 20, item, section1);
       item.properties.image = "KS_nav_ui.png";
       win.add(list);
       
       list.addEventListener('itemclick', function(e){  
           alert(
               "ItemId: " + e.itemId + "\n" +
               "BindId: " + e.bindId + "\n" +
               "Section Index: " + e.sectionIndex + ", Item Index: " + e.itemIndex
           );    
       });
            
         
       win.open();
            
       function addItems(index, count, item, section) {
           for (var i = index; i < index + count; i++) {
               item.properties.title = "Label " + i;
               section.appendItems([item]);
           }
       }
       
  4. Ping Wang 2013-10-02

    Test case for changing the headerView property of the listview section:
       var win = Ti.UI.createWindow({backgroundColor: 'yellow', fullscreen: false});
       
       var view0 = Ti.UI.createView({height: "50dp", backgroundColor: "white"});
         
       var view1 = Ti.UI.createView({height: '200dp', backgroundColor: "green"});
       var button = Ti.UI.createButton({title: "change me"});
       view1.add(button);
       button.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button1");
          section1.headerView = view0;
          });  
        
       view1.addEventListener('click', function(e) {
          Ti.API.log("you clicked headerView");
       });
         
       var view2 = Ti.UI.createView({height: '200dp', backgroundColor: "red"});
       var button2 = Ti.UI.createButton({title: "change height to 100dp"});
       view2.add(button2);
       button2.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button2");
          view2.height = '100dp';
       });  
        
       var view3 = Ti.UI.createView({height: '100dp', backgroundColor: "blue"});
       var button3 = Ti.UI.createButton({title: "change height to 200dp"});
       view3.add(button3);
       button3.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button3");
          view3.height = '200dp';
       }); 
        
       var view4 = Ti.UI.createView({height: '100dp', backgroundColor: "purple"});
       var button4 = Ti.UI.createButton({title: "change height to 200dp"});
       view4.add(button4);
       button4.addEventListener('click', function(e) {
          Ti.API.log("you clicked on button4");
          view4.height = '200dp';
       }); 
       win.open();
        
       var section1 = Ti.UI.createListSection({headerView: view1, footerView: view2});
       var list = Ti.UI.createListView({headerView: view3, footerView: view4, separatorColor: 'blue', backgroundColor: 'white', sections:[section1]});
       var item =  {properties: {title: "hi", backgroundColor: "yellow", backgroundSelectedColor: "blue", accessoryType: 1, image: "appicon.png", color: "blue", font: {fontSize: "20sp"} }};
       addItems(0, 20, item, section1);
       
        
       win.add(list);
        
       function addItems(index, count, item, section) {
           for (var i = index; i < index + count; i++) {
               item.properties.title = "Label " + i;
               section.appendItems([item]);
           }
       }
       
  5. Ping Wang 2013-10-17

    PR for selectedBackgroundColor/Image: https://github.com/appcelerator/titanium_mobile/pull/4783
  6. Lee Morris 2017-03-16

    Closing ticket as fixed.

JSON Source