我了解到,要最大程度地提高Android列表视图的效率,您应该只拥有尽可能多的膨胀“行”视图以适合屏幕显示。视图移出屏幕后,应在您的getView
方法中重用它,检查是否convertView
为null。
但是,当列表需要2种不同的布局时,如何实现此想法?可以说它的订单列表,其中一个布局用于已完成的订单,另一个布局用于在处理中的订单。
这是我的代码正在使用的想法的示例教程。就我而言,我将有2行布局:R.layout.listview_item_product_complete
和R.layout.listview_item_product_inprocess
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
if(getItemViewType(position) == COMPLETE_TYPE_INDEX) {
convertView = mInflator.inflate(R.layout.listview_item_product_complete, null);
holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_complete);
holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_complete);
}
else { // must be INPROCESS_TYPE_INDEX
convertView = mInflator.inflate(R.layout.listview_item_product_inprocess, null);
holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_inprocess);
holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_inprocess);
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
thisOrder = (Order) myOrders.getOrderList().get(position);
// If using different views for each type, use an if statement to test for type, like above
holder.mNameTextView.setText(thisOrder.getNameValue());
holder.mImgImageView.setImageResource(thisOrder.getIconValue());
return convertView;
}
public static class ViewHolder {
public TextView mNameTextView;
public ImageView mImgImageView;
}
您需要让适配器的视图回收器知道不止一种布局,以及如何区分每一行的两种布局。只需覆盖以下方法:
@Override
public int getItemViewType(int position) {
// Define a way to determine which layout to use, here it's just evens and odds.
return position % 2;
}
@Override
public int getViewTypeCount() {
return 2; // Count of different layouts
}
合并getItemViewType()
进来getView()
,像这样:
if (convertView == null) {
// You can move this line into your constructor, the inflater service won't change.
mInflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
if(getItemViewType(position) == 0)
convertView = mInflater.inflate(R.layout.listview_item_product_complete, parent, false);
else
convertView = mInflater.inflate(R.layout.listview_item_product_inprocess, parent, false);
// etc, etc...
观看Android的Romain Guy 在Google
Talks上讨论视图回收器。
在Xamarin中,我目前有两个不同的活动,我想将它们组合在一起并使用一个视页。 一个活动使用以下内容视图: 第二个活动使用以下内容视图: 提前致谢
我想停止我的几个页面显示在搜索结果中。我的理解是,我将以下内容添加到页面的部分: 问题是我的页面使用了一个通用的布局页面。类似于: 布局页面内部是head部分,包含大量链接、脚本和元标记。我不想为可索引和不可索引的页面重复这一点。 从我的研究中我发现:- 有多个节是错误的。 将robot meta标记放在head之外是不好的。 使用robots.txt超出了我的需要,而且是错误的。 试图将模型传递
问题内容: 我有2个要用于修改相同数据的不同布局文件,我将切换到“编辑视图”的布局,该布局允许用户修改图形数据,然后允许他们切换回“详细视图” ”显示详细的图表(使用androidplot库)。 我的问题是,当切换回我的“编辑视图”时,我的图形线不见了,只绘制了轴(因此布局切换,而我的图形视图被调用了onDraw())。一切都存储在同一个活动中,所以我不明白为什么这不起作用? 这些行存储在Grap
问题内容: 我有称为的布局,并且将方向设置为纵向。我也为Honeycomb设计了这种布局,并将其放置在文件夹中,但是我只想在横向使用 in 。 现在,该怎么办? 谢谢 问题答案: 您可以将其放置在中,然后仅以横向使用。 请参阅支持多屏幕(使用配置限定符) Android支持多个配置限定符,可让您控制系统如何根据当前设备屏幕的特征选择备用资源。配置限定符是一个字符串,您可以将其附加到Android项
我使用列表中的子元素实现了一个可扩展的recyclerview。我遵循了这个准则。这就是它的工作原理, 下面简要描述使用RecyclerView实现ExpandableListView。列表模型有一个附加参数“type”,用于标识项目是标题还是子项。通过检查此参数,适配器将根据类型为view和viewholder充气。如果类型为HEADER,它将扩展HEADER项的布局,其中包含一个TextVie
问题内容: 为TextView和ImageView设置相同的ID是否正确?由于它们属于一个实体,因此我给了他们两个相同的ID。如果是..那我怎么能分别通过id找到这些视图呢? 问题答案: 为TextView和ImageView设置相同的ID是否正确? 简短答案: 否 长答案:使用相同的ID 是 不 正确的,因为这样做可能会导致运行时错误。考虑下面的例子 layout.xml LocationAct