Titanium笔记---ScrollableView

最近因为工作需要,做Android&iOS跨平台的项目,开始学习Titanium,由于Titanium是由Js,xml,tss(其实就是css)构成,所以对于Java开发者来说比较容易上手。

在工作中也遇到遇些问题,在此做个记录。


1. 类似Facebook的List:


虽然不知Facebook具体是如何做到的,我的方案为垂直的ListView + 横向的ScrollableView(每个ListItem显示图片)。

下面要实现的功能就是在垂直的ListView的每个item中有个横向翻阅的图片集,有图则显示,没图则不显示

一开始做法是这样的:

xml:

<Alloy>
	<View class="container">
		<ListView id="dataListView" separatorColor="#FFF">
			<Templates>
				<ItemTemplate name="template">
					<View bindId="main" id="main">
						<ScrollableView bindId="scrollableView" id="scrollableView" showPagingControl="true" height="150"/>
					</View>
				</ItemTemplate>
			</Templates>
			<ListSection id="listSection" ></ListSection>
		</ListView>
	</View>
</Alloy>


js:
dataSet.push({ // 添加数据
	template : "template",

	scrollableView : {		//在这里可以设置 visible,height,width等属性,后来发现有问题,下面再说
          views : photoViewSet, //photoViewSet是一个ImageView的array,就是一个item中横向的图片集
         }
});
$.dataListView.setMarker({ // 这里是为ListView动态刷新做的maker
        sectionIndex : 0,
        itemIndex : $.listSection.getItems().length - 1
});
function markerFunction() {
        // 添加数据操作,设置一个lastIndex,每次递增请求数据
}
$.dataListView.addEventListener('marker', markerFunction); //设置marker监听
以上就是主要代码。
上面scrollableview注释部分原来我是设置有图和没图时是否显示scrollableview的设置,要涉及到visible,height,width 3个属性,有人说只要visible就可以了,确实不显示了,但是它的height和width还在,至少得把height给设置为0 。
但是这里出现了一个问题。每次在滑动ListView时,没图和有图交替时,程序会crash掉,纠结了我多久(经验不够啊),后来提示才看明白是scrollableview的height和width发生变化需要类似Android中notifydatasetchanged的操作才行,找了很久也没找到具体的方法。之后,想到了一个惊天地泣鬼神的方法,终于解决了----------------新加一个template,一个有scrollableview,一个没有,在dataSet.push前面判断,来选择template。。。(尽管沉默吧。。。)
如果要想点击每个图片然后放大,类似Facebook或者QQ空间浏览大图时的操作,就要对每一个imageview做监听,一开始我在listview的itemclick监听事件里面做操作,总是拿不到imageview,后来在每个imageview的click监听事件中也做操作,因为是在循环push和update数据,所以得到指定的图片这个问题卡了我很久。
解决方案出来了: 
imgView.addEventListener("click", function(e) {
	Util.showImagesPopup(e.source.properties.photos, e.source.properties.index);// 忽略Util.showImagesPopup,这是一个全局的方法,弹出全屏大小的图片并进行翻阅,类似scrollableview,不做详解,主要讲的就是e.source就可以得到指定的imageview了。(累觉不爱了。。。基础啊)<pre name="code" class="java"><span style="font-size: 14px;">});</span>
 
 
传图片这里也有讲究,你是要在listview界面下载好图,还是先显示小图,点击后下载大图并显示,这是你自己的选择了,总之你在点击每一个图片(任意位置)后并显示指定图片,并能左右翻阅。就要传递所有图片的array和指定图片的index。在scrollableview中设置currentPage : index来首先显示指定图片。

讲完了,如果有更好的解决方案的话,请分享下,造福全码农!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值