【发布时间】:2016-12-21 01:30:36
【问题描述】:
我正在为 RecyclerView 苦苦挣扎。我使用回收站视图来显示我的模型类的详细信息。
//My model class
MyModel {
String name;
Double latitude;
Double longitude;
Boolean isOnline;
...
}
由于某些值可能不存在,我将 RecyclerView 与自定义视图类型一起使用(一个代表我模型的每个值)。
//Inside my custom adapter
public void setModel(T model) {
//Reset values
itemCount = 0;
deviceOfflineViewPosition = -1;
mapViewPosition = -1;
//If device is offline, add device offline item
if (device.isOnline() == null || !device.isOnline()) {
deviceOfflineViewPosition = itemCount;
itemCount++;
}
//Add additional items if necessary
...
//Always add the map as the last item
mapViewPosition = itemCount;
itemCount++;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == deviceOfflineViewPosition) {
return ITEM_VIEW_TYPE_OFFLINE;
} else if (position == mapViewPosition) {
return ITEM_VIEW_TYPE_MAP;
} else if (...) {
//Check for other view types
}
}
使用 RecyclerView,我可以在运行时轻松确定哪些值可用,并将相应的项目添加到 RecyclerView 数据源。我简化了代码,但我的模型有更多的值,我有更多的视图类型。
RecyclerView 中的最后一项始终是地图,并且始终存在。即使我的模型中没有任何价值,至少也会有一个项目,即地图。
问题:我怎样才能让 RecyclerView 中的最后一项填满屏幕上的剩余空间并保持最小高度。大小应为较大的值:剩余空间或最小高度。例如:
- 模型有几个值,总共占用 600dp 屏幕的 100dp -> 地图高度应为 500dp
- 模型有很多值,总共占600dp屏幕的500dp -> 地图高度应该是200dp的最小值
- 模型没有值 -> 地图填满整个屏幕
【问题讨论】:
-
“剩余空间”的概念在像 RecyclerView 这样的滚动视图的上下文中没有多大意义。但是,您可以使用 View.setMinimumHeight() 设置最小高度,并使用 View.setLayoutParams() 将高度设置为匹配父级。这必须在绑定过程中完成,具体取决于您拥有的物品数量。
-
确实如此,这就是为什么我也有我的 minHeight。看,如果 recyclerview 的内容占的空间比屏幕少,我想拉伸地图以覆盖空白空间。如果屏幕上无法容纳的内容过多,显然没有剩余的内容可以填充,因此应该使用 minHeight
标签: android google-maps android-recyclerview adapter android-adapter