在 RecyclerView android 中拖放期间面临位置值问题

2024-04-23

如何在 RecyclerView 适配器中拖放时获取新的位置值?

拖放工作正常,但是当我设置 setOnClickListener 打开我的详细活动时。它给了我旧的位置值。

例如 :

如果我拖动第二个项目(INDEX 1)并放在第一个项目的位置(INDEX 0)。

当我调用 Intent 时,在 setOnClickListener 内进行调试。位置值为 1 (INDEX 1),但我需要的是值 0 (INDEX 0)。

 @Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
    holder.textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(activity, DetailActivity.class);
                intent.putExtra("NAME_POSITION", position);
                intent.putParcelableArrayListExtra("NAME_LIST", mName);
                ((Activity) context).startActivityForResult(intent, 800);
        }
 }
  • 对于拖放,我创建了 2 个类。

    1) CustomItemTouchHelper 扩展 ItemTouchHelper.Callback

class

//Interface interface

public ItemTouchHelper(Interface interface) {
    this.interface = interface;
}

@Override
public boolean isLongPressDragEnabled() {
    return true;
}

@Override
public boolean isItemViewSwipeEnabled() {
    return false; // swiped disabled
}

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // movements drag
    return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, dragFlags); // as parameter, action drag and flags drag
}

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    interface.onMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); // information to the interface
    return true;
}

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    // swiped disabled
}    

2)OnMove方法的接口

void onMove(int oldPosition, int newPosition);

在activity中实现了这个方法

    ItemTouchHelper.Callback callback = new CustomItemTouchHelper(this);
    ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
    touchHelper.attachToRecyclerView(list);

Activity 中实现的接口。

onMove(int oldPosition, int newPosition) {
  Collections.swap(mNames, oldPosition, newPosition);
  adapter.notifyItemMoved(oldPosition, newPosition);
}
  • 如果缺少某些内容,请纠正或指导我。
  • 感谢和问候。

确保重写 getItemId() 方法,该方法在适配器上返回唯一值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RecyclerView android 中拖放期间面临位置值问题 的相关文章

  • RecognizerIntent 不起作用; “缺少额外的呼叫包”

    我在 Android 2 2 上使用 RecognizerIntent API 时遇到问题 当我使用以下代码调用 API 时 Intent intent new Intent RecognizerIntent ACTION RECOGNIZ
  • 仅使用 Context 而不是 Activity 实例显示对话框

    如果我使用 Activity 实例 我可以显示对话框 但当我使用上下文或应用程序上下文实例时 对话框不会显示 AlertDialog Builder builder new AlertDialog Builder activity buil
  • 如何列出我的应用程序以供下载文件?

    我想通过我的应用程序从浏览器下载文件 我正在尝试将我的应用程序列在complete action using对话 它显示其他操作 例如查看文件等 但在下载文件的情况下 它不会显示在对话框中 我怎样才能像图片中那样列出我的应用程序 我在我的活
  • 标准呼叫屏幕上的活动窗口 - 启用按钮

    我想在通话屏幕活动上添加一个小窗口 弹出窗口 谷歌语音 and 世界通话地点和时间 http areacellphone com 2010 04 android worldcallplaceandtime apps know place a
  • 为什么 Android 服务在测试时不是单例的?

    当运行大量测试套件时 我注意到我的一个 Android 服务不再是单例的 Android 服务应该是单例的 但是当使用 ServiceTestCase 时 我的引用计数超过 1 在 onCreate 中递增 在 onDestroy 中递减
  • Android Studio:无法终止 xxx 的现有进程

    The application is a system application and it will be started by other applications When I install the application from
  • 对齐卡片视图中的项目

    我希望我的卡片如下所示 我保持这样的布局
  • 使用 Gradle 进行 Travis-CI Android 测试总是超时

    我正在尝试在 Travis CI 上构建和测试我的项目 它每次都会在我的所有存储库上向我显示相同的重复输出 这是我的 travis ymlhttps github com carts uiet cartsbusboarding blob m
  • 防止 FragmentPagerAdapter 中的 WebView 重新加载?

    我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡 所有选项卡都从 Web 服务器加载数据 其中一个选项卡包含一个从我的服务器加载图像的 WebView 生成图像的服务器端成本很高 因此我想减少重新加载 WebV
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • Android 中的垂直和水平滚动视图

    我真的很累了寻找垂直和水平滚动视图的解决方案 我读到框架中没有任何视图 布局实现此功能 但我需要这样的东西 我需要在其他布局中定义一个布局 子布局必须实现垂直 水平滚动才能移动 最初实现了一个逐像素移动布局的代码 但我认为这不是正确的方法
  • Android Realm.io:行/对象不再有效

    这是我的删除功能 它确实找到了workday1 object public static void delete Context context Workday workday Realm realm getRealm context re
  • 检查应用程序是否首次运行[重复]

    这个问题在这里已经有答案了 我是 Android 开发新手 我想根据应用程序安装后首次运行来设置一些应用程序的属性 有什么方法可以发现应用程序是第一次运行 然后设置其首次运行属性吗 下面是一个使用的例子SharedPreferences实现
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • 从包中发布的错误通知无法展开 RemoteViews

    我有个问题 有时我的服务会被这个 logcat 强制关闭 03 26 20 44 44 849 E AndroidRuntime 12080 FATAL EXCEPTION main 03 26 20 44 44 849 E Android
  • 如何将QR码中的3个方块替换为圆圈以使用Paint android使用zxing自定义QR码?

    我用它作为自定义的参考 从方形到圆形使用zxing生成的QR码它是在java中所以我尝试将它转换为在android中使用 使用 zxing 生成具有自定义点形状的 QR 码 https stackoverflow com questions

随机推荐