我需要创建动态布局(即根本不使用xml)。在移动设备上,服务api将提供jsons。这些jsons将保持布局模式或设计动态绘制。 这些布局jsons将corespond我们需要显示不同的模板。它可以超过150个模板。 请在下面找到一个样本模板: -动态视图创建性能问题
Template.json
{
"data": {
"layouts": [
{
"layoutId": 0,
"width": "34%",
"selectedbackgroundcolor": "#96F2CD",
"gradient": true,
"backgroundcolor": "#afeeb9",
"gradientcolors": [
"#afeeb9",
"#f3f6f7"
],
"strokewidth": 1,
"strokecolor": "#7bad51",
"children": [
{
"children": [
{
"backgroundcolor": "#3074c6",
"type": "label",
"field": "textfield1",
"fontsize": 14,
"textcolor": "#FFFFFF",
"alignment": "right",
"width": 242,
"singleline": true,
"topmargin": 10,
"rightmargin": 10,
"rightpadding": 10,
"bottompadding": 5,
"toppadding": 5
},
{
"backgroundcolor": "#3074c6",
"type": "label",
"text": "textfield: #",
"dependonfield": "textfield1",
"fontsize": 14,
"topmargin": 10,
"textcolor": "#FFFFFF",
"alignment": "right",
"width": 95,
"singleline": true,
"leftpadding": 10,
"bottompadding": 5,
"toppadding": 5,
"leftmargin": 10
}
]
},
{
"children": [
{
"type": "label",
"field": "FormattedClosedDate",
"fontsize": 14,
"textcolor": "#000000",
"alignment": "right",
"width": 90,
"topmargin": 5,
"singleline": true,
"rightmargin": 10
},
{
"type": "label",
"text": "Closed On: ",
"dependonfield": "FormattedClosedDate",
"fontsize": 14,
"topmargin": 5,
"textcolor": "#000000",
"alignment": "right",
"width": 100,
"singleline": true,
"leftmargin": 5,
"bold": true
}
]
},
{
"children": [
{
"type": "label",
"field": "Title",
"textcolor": "#000000",
"alignment": "left",
"fontsize": 17,
"bold": true,
"singleline": true,
"topmargin": 10,
"leftmargin": 10,
"rightmargin": 10
}
]
},
{
"children": [
{
"type": "label",
"field": "Summary",
"textcolor": "#7E957B",
"alignment": "left",
"fontsize": 14,
"leftmargin": 10,
"bottompadding": 20,
"maxline": 2,
"rightmargin": 10
}
]
}
]
}
]
},
"rcode": 100,
"msg": "Success"
}
我写的这些模板的布局解析器。我选择Listview来动态膨胀从布局分析返回的视图。每个listview的行现在都拥有不同的布局视图或模板。 所以我不能使用视图持有者模式来重用视图的元素。由于视图是动态创建的,因此视图ID是动态创建的。
我在单个时间点显示列表中的15个项目。我正在使用这个库在一个时间点加载n个物品,共计x个物品--- https://github.com/chrisbanes/Android-PullToRefresh。
现在的问题是: -
内存泄漏,因为我们没有使用视图持有人格局。
上下文用于创建它们与活动 生命周期耦合的新视图。
- 在活动未被破坏之前,视图不会被销毁。
请为我提供一个使用除Listview以外的替代解决方案或修改当前的方法。
查看持有者模式用于通过减少对findviewbyid的调用来减少充值列表项所需的时间,这是一项昂贵的操作。它不用于内存管理目的。ListView生成的元素只有在您滚动时才会显示更多视图。所以内存管理所需要的是别的地方。请在应用程序崩溃时发布日志猫 –
我的公司政策也经常禁止我发布代码。最好写一个单独的(非常简单的)例子来展示你的问题并发布。当你发布你的“蒸馏”例子时,确保你告诉人们你正在做的是为了防止“你为什么这样做?”的不可避免的潮流。的问题。 – Martin
我会在星期一发布一个示例代码。 –