当前位置: 首页 > 知识库问答 >
问题:

调用setVisibility()方法后,RecyclerView项的高度发生变化

任宾鸿
2023-03-14

我尝试在RecyclerView中通过滑动实现删除。在滑动项目后,我调用notifyItemChanged()并在onBindViewHolder方法中更改视图的可见性。

public void onBindViewHolder(CustomViewHolder holder, int position) {
    if (isPendingRemoval(position)) {
        holder.textView.setVisibility(View.INVISIBLE);            
        holder.undoButton.setVisibility(View.VISIBLE);

        final int adapterPosition = holder.getAdapterPosition();

        holder.undoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Runnable pendingRemovalRunnable = mPendingRunnables.get(adapterPosition);
                mHandler.removeCallbacks(pendingRemovalRunnable);
                mPendingRunnables.remove(adapterPosition);
                notifyItemChanged(adapterPosition);
            }
        });

    } else {
        holder.textView.setVisibility(View.VISIBLE);            
        holder.undoButton.setVisibility(View.INVISIBLE);
        holder.textView.setText(someText);            
    }
}

但在删除后,项目的高度会发生变化。截图

项目.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:paddingRight="8dp"
    android:paddingLeft="@dimen/activity_horizontal_margin">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/item_text"
        android:layout_gravity="center_vertical"/>
    <Button
        android:id="@+id/item_button_undo"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="@string/button_undo_text"
        android:layout_gravity="end|center_vertical"
        style="@style/Base.Widget.AppCompat.Button.Borderless"/>
</FrameLayout>

我能做些什么来节省物品的高度?

共有1个答案

司空福
2023-03-14

您可以尝试将按钮宽度设置为match_parent,只需更改其可见性而不是TextView的可见性(显然给出了项目的高度),这样,项目应保持高度和宽度,按钮应在TextView上可见隐藏它

public void onBindViewHolder(CustomViewHolder holder, int position) {
    if (isPendingRemoval(position)) {
        // holder.textView.setVisibility(View.INVISIBLE);            
        holder.undoButton.setVisibility(View.VISIBLE);

        final int adapterPosition = holder.getAdapterPosition();

        holder.undoButton.setOnClickListener(new View.OnClickListener() {
            @Override
             public void onClick(View v) {
                Runnable pendingRemovalRunnable = mPendingRunnables.get(adapterPosition);
                mHandler.removeCallbacks(pendingRemovalRunnable);
                mPendingRunnables.remove(adapterPosition);
                notifyItemChanged(adapterPosition);
            }
        });

    } else {
        // holder.textView.setVisibility(View.VISIBLE);            
        holder.undoButton.setVisibility(View.INVISIBLE);
        holder.textView.setText(someText);            
    }
}
 类似资料:
  • 我目前正在编写一个应用程序,我希望有一个800x600像素的最小场景大小。在第一次尝试中,我简单地使用了和,但是这些值对整个窗口都有影响,而不仅仅是对场景,所以只显示了场景的7xx x5xx。因此,我搜索了Stage javadoc并找到了,这正是我所需要的,调用后Stage的大小大于800x600,并且场景完全显示为800x600像素。 现在唯一的问题是,这个方法调用没有将舞台宽度和高度保存在舞

  • 我有一些大型公司Spring项目对我来说是未知的,我需要在上面执行这种任务: “我有方法A和方法B,在方法A的执行过程中,可以调用方法B吗?” 我发现IntelliJ思想中有函数方法调用层次结构。我可以在方法B上执行这个函数并生成调用层次结构,在这里我可以为方法A执行serarch。不幸的是,在计算这个层次结构时,IntelliJ冻结了,因为它太大了,工作5个小时后就崩溃了。 我需要比Intell

  • 问题内容: 我遇到了一个旧的可变高度导航问题:顶部导航,底部导航。异步加载数据时,导航可以更改高度,因此内容的边距也必须随之更改。 我希望这是自给自足的。因此,没有代码在何处加载数据,而仅在涉及的html-elements / directives中。 目前,我正在AngularJS 1.2.0中使用如下计时器进行操作: 这有一个明显的 缺点,那就是使用计时器 (我觉得这很丑陋),并且 在调整导航

  • 我有一个问题与OneTo多关系。我正在使用sping-mvc和sping-Security和Hibernate4。 我正在为所有人使用注释。 我的问题是在实体战争中,当我看到属性列表玩家调试时,我看到,当我单击它时, 我也得到了这个例外: 实体: - 我的DAO

  • 请注意:我已经检查了SO上的其他问题,虽然我可以消除错误,但它还有其他问题。 下面是我现有的代码: 我的适配器类: 修改代码查看各种答案: 现在,我没有得到错误,但是每次都被调用两次,并且recyclerview中的视图每次都在刷新。我做错了什么?请参阅logcat输出: