我在世界各地搜索这个问题的答案,但我没有找到这个热门问题的任何直接答案。最后我混合了一些技巧并解决了这个问题!
我的问题开始于我的老板让我在 ScrollView 中使用 RecyclerView,而您知道我们不能使用两个 Scrollable 对象除非我们为 RecyclerView 设置或知道 fix item height。这就是答案:
第 1 步:
首先你应该找到你的 RecyclerView 灵活的项目高度,这可以从你的 RecyclerView>onBindViewHolder
holder.itemView.post(new Runnable() {
@Override
public void run() {
int cellWidth = holder.itemView.getWidth();// this will give you cell width dynamically
int cellHeight = holder.itemView.getHeight();// this will give you cell height dynamically
dynamicHeight.HeightChange(position, cellHeight); //call your iterface hear
}
});
使用此代码,您可以在它们构建时找到您的项目高度,并通过界面将项目高度发送到您的活动。
对于接口有问题的朋友,我在下面留下接口代码,应该写在适配器中。
public interface DynamicHeight {
void HeightChange (int position, int height);
}
第 2 步:
到目前为止,我们找到了我们的项目高度,现在我们想为我们的 RecyclerView 设置高度。首先我们应该计算项目高度的总和。在这一步中,我们通过 BitMap 执行此操作
第一步 实现 最后一步 interface 并在您的 Activity 或 Fragment 中编写这些代码来定义您的 RecyclerView :
@Override
public void HeightChange(int position, int height) {
itemHeight.put(position, height);
sumHeight = SumHashItem (itemHeight);
float density = activity.getResources().getDisplayMetrics().density;
float viewHeight = sumHeight * density;
review_recyclerView.getLayoutParams().height = (int) sumHeight;
int i = review_recyclerView.getLayoutParams().height;
}
int SumHashItem (HashMap<Integer, Integer> hashMap) {
int sum = 0;
for(Map.Entry<Integer, Integer> myItem: hashMap.entrySet()) {
sum += myItem.getValue();
}
return sum;
}
第 3 步:
现在我们有了 RecyclerView 高度的总和。对于最后一步,我们应该将我们在上一步中编写的接口发送给适配器,并使用如下代码:
reviewRecyclerAdapter = new ReviewRecyclerAdapter(activity, reviewList, review_recyclerView, this);
当您实现接口时,您应该将它与我使用的上下文一起发送给您的this。
好好享受吧