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

删除行后,SwipeListView保持“swiped状态”

杜俊爽
2023-03-14

我正在为我的列表使用滑动列表视图库。列表适配器正在使用视图持有者模式,一切正常。我设置向左轻扫,列表项视图下有一个后退视图。在这个后视图上,我有一个文本视图“删除”。单击后,正在执行删除操作。适配器中的数据正在刷新。行已删除 。但是“滑动状态”被设置在位置靠近删除的那一行的行上。我不相信它发生,因为转换视图记住了“滑动状态”。当我注释掉检查转换视图是否为空时,问题消失了,但列表滚动性能是不可接受的。有没有办法在删除操作后清除转换视图?还是有其他工作?

我的ViewHolder:

public static <T extends View> T get(View view, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
    if (viewHolder == null) {
    viewHolder = new SparseArray<View>();
    view.setTag(viewHolder);
    }
View childView = viewHolder.get(id);
if (childView == null) {
    childView = view.findViewById(id);
    viewHolder.put(id, childView);
    }
return (T) childView;
}

我的适配器的getView():

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = LayoutInflater.from(context)
                .inflate(R.layout.level_item, parent, false);
    }

    ...
    ...
    del = ViewHolderNew.get(convertView, R.id.del);

    del.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Level level = list.get(position);
            long id = level.getId();
            Level leveltoDelete = Level.load(Level.class, id);

            new Delete().from(Recipient.class).where("level = ?", id).execute();
            leveltoDelete.delete();

            remove(level);
            notifyDataSetInvalidated();

        }
    }); 

还有我的xml文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:background="@color/white_background"
>
//item back layout
<LinearLayout
    android:id="@+id/item_back"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<TextView
    android:id="@+id/del"
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:gravity="center_vertical|right"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:background="@color/delete_background"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:paddingRight="30dp"
    android:textColor="@color/white_background"
    android:text="Delete"
    android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

//item front layout
<RelativeLayout
android:id="@+id/item_front"
android:layout_width="match_parent"
android:layout_height="match_parent">
...

共有1个答案

穆铭晨
2023-03-14

我不知道这个库,但是我认为它改变了行项目的子元素的可见性。

删除并刷新后,ListView 会请求新行,将旧视图作为转换视图传递给您 - 其中之一是“滑动”视图。向下滚动列表后,您可能会观察到相同的行为,因为它也重用了不再可见的视图。

如果您可以说视图是在滑动之后,那么您可能可以在重用之前应用反向转换(或者只是膨胀新的视图,每页一行应该不会对性能有太大影响)。

但是,如果您向下滚动并返回,此解决方案将不会保持滑动状态。如果您需要跟踪滑动的位置,您应该考虑添加额外的视图类型(请参阅getViewType(point)getViewTypeCount())。

 类似资料:
  • 我使用vuex persistedstate包https://github.com/robinvdvleuten/vuex-persistedstate以在浏览器上保持数据状态。 当我从应用程序注销时,软件包会清除所有关于已验证用户的状态信息。然而,我意识到,在关闭选项卡和jwt令牌过期后,它不会删除敏感数据,而且它仍然可以在本地存储上访问。 对此有什么建议吗?

  • HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 存储方式包括cookie、session,会话一般指session对象 使用cookie,所有数据存储在客户端,注意不要存储敏感信息 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储sessio

  • SwipeListView 实现了自绘制的 ListView 单元格,可通过滑动来显示扩展面板。

  • 问题内容: 我使用以下代码从指定范围获取随机值 这是可行的,并在您调用此函数时在指定范围内提供3个值的数组,但是当我需要再次调用它时,这里的问题变得更加棘手,请忽略从提供的数字中排除 先前 提供的数字(例如下次不提供这些数字时提供10,11,12 …),还有更好的方法吗?我尝试使用回拨电话,但迷路了:(,任何想法该怎么做? 问题答案: 一种方法是创建一个数组来存储现有选择,将选定的元素推入数组,检

  • android-swipelistview 是一个 Android 列表视图,它支持可绘制的单元格和其他与横刷动作相关的功能。

  • 问题内容: 我正在使用POST方法。我需要创建一次,并且应该使用Keep Alive Connection。但是我认为,它每次都会建立一个新的连接。 因此,我需要使用 保持活动 连接。 这是我的代码段,很多帮助将不胜感激。 而且logcat日志是: 问题答案: 10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 您正在要求保持活动状态。