gpt4 book ai didi

android - 将支持库从 "23.1.1"升级到 "23.2.1"后,回收站 View 项填满整个回收站 View 高度

转载 作者:IT王子 更新时间:2023-10-28 23:52:48 27 4
gpt4 key购买 nike

以前,我使用的是以下旧支持库“23.1.1”。

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:preference-v7:23.1.1'
compile 'com.android.support:preference-v14:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'

效果很好。这是我的 RecyclerView 的样子

enter image description here

现在,由于完成了一些错误修复,我希望迁移到“23.2.1”。

compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:preference-v7:23.2.1'
compile 'com.android.support:preference-v14:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'

然而,突然之间,我所有的 RecyclerView 项目,似乎填满了 RecyclerView 的整个高度。

enter image description here

enter image description here

这是我的布局文件的代码 fragment :https://gist.github.com/yccheok/241a0d38d56305a1be24d09b54eb1600

真正让我困惑的是,虽然我在我的回收站 View 项目布局中使用了 "wrap_content",但它并没有按预期工作。

我的 RecyclerView 没有使用任何自定义布局管理器。

来自 http://developer.android.com/tools/support-library/index.html ,我意识到这次 23.2.1 对 RecyclerView 进行了相当多的更改。

  • 修复了与各种测量规范方法相关的错误。 (第 201856 期)
  • 缩短了在计算布局或滚动时 RecyclerView 不允许适配器更改的锁定期。 (第 202046 期)
  • 修复了在 View 外的项目上调用 notifyItemChanged() 时的崩溃问题。 (第 202136 期)
  • 修复了 RecyclerView.LayoutManager 在同一测量过程中添加和删除 View 时发生的崩溃。 (问题 193958)

我最怀疑的是https://code.google.com/p/android/issues/detail?id=201856 ,因为它涉及更改各种测量规范方法

到目前为止,我尝试使用 23.2.1 的简​​单 RecyclerView 项目重现该问题,但失败了!它没有“项目填满 RecyclerView 整个高度”的问题。我的猜测是,我的简单项目并没有模拟我的生产项目的复杂布局结构。我的生产项目具有以下布局

<Activity>
<Fragment>
<View Pager>
<Fragment>
<RecyclerView />
</Fragment>
</View Pager>
</Fragment>
</Activity>

调试了几个小时,我还是找不到这个问题的根本原因,有什么提示吗?

谢谢。

我尝试过的

我曾尝试更改 RecyclerView

来自

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"

最初看起来不错。但是,当您执行滚动时,事情并没有按预期工作:https://www.youtube.com/watch?v=U2EChFn6WkI

更新:我终于找出了根本原因

是我的错误!由于我需要为最后一行项目设置不同的边距,这是我的适配器代码。

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final List<TransactionSummary> transactionSummaries = buyArray.transactionSummaries;

if (position == transactionSummaries.size() - 1) {
holder.itemView.setLayoutParams(lastLayoutParams);
} else {
holder.itemView.setLayoutParams(normalLayoutParams);
}

不幸的是,lastLayoutParamsnormalLayoutParams 被初始化为

    normalLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);

lastLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);

使用LinearLayout.LayoutParams.WRAP_CONTENT解决问题。

最佳答案

更新

您似乎正在为 Adapter 中的 View 更新 LayoutParam

这可能是因为在您开始滚动之前,您的 UI 看起来非常好。这意味着您的 XML 是正确的,因为它是在您的 XML 布局文件中定义的。

滚动开始后它会发生变化,这意味着您的 onBindViewHolder 实现中存在逻辑错误。这就是为什么当你向下滚动时出现错误,然后当你向上滚动时错误仍然存​​在。

旧答案

你的问题是你的分频器坏了:

<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="?attr/buyPortfolioSeperatorBackground"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp" />

出于测试目的,将其设置为:

<View
android:layout_width="1px"
android:layout_height="30dp"
android:background="?attr/buyPortfolioSeperatorBackground"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp" />

确保你同时改变它们!

关于android - 将支持库从 "23.1.1"升级到 "23.2.1"后,回收站 View 项填满整个回收站 View 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com