Android 在 Adapter kotlin 中选择和取消选择项目时出现问题?

2023-12-31

我正在创建一个视图以分组方式显示时间。为此,我将项目分组到哈希图中并将其传递给活动。从我的活动中,我正在初始化父适配器以以线性方式显示列表。在该父适配器中,还有另一个子适配器,其中包含使用 gridLayout 管理器以网格方式显示的时间项。

The Image of the current scenario and the issue is as below: enter image description here

现在的实际问题是,我一次只想选择 1 次。但正如你所看到的,不同的数组列表在这里有不同的选择。当我从同一组中选择 1 个项目时,它工作正常。但这并不是取消选择其他组的时间。我怎样才能做到这一点?

父适配器:

class TimePickerAdapter(context: Context, arrTimeSlots: ArrayList<ListItem>) :
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {

val mContext = context
val mList = arrTimeSlots

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
    return if (viewType == ListItem.TYPE_HEADER) {
        TimeHeaderHolder(LayoutInflater.from(parent?.context).
                inflate(R.layout.item_time_group, parent, false))
    } else {
        TimeSlotsHolder(LayoutInflater.from(parent?.context).
                inflate(R.layout.item_time_child, parent, false))
    }
}

override fun getItemCount() = mList.size

override fun getItemViewType(position: Int): Int {
    return mList[position].type
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
    if (holder is TimeHeaderHolder) {
        holder.itemView?.apply {
            with(mList[position] as TimeHeaderItem) {
                tvTimeGroupHeader.text = date
            }
        }
    } else {
        holder?.itemView?.apply {
            with(mList[position] as TimeSlotItem) {
                val mAdapter = TimeSlotsAdapter(mContext, pojoOfTimeSlots)
                rvTimeSlotsChild.layoutManager = GridLayoutManager(mContext, 3)
                rvTimeSlotsChild.adapter = mAdapter
            }
        }
    }
}

inner class TimeHeaderHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

inner class TimeSlotsHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

}

我的子时间段适配器 -> 在此适配器中,我编写了一段代码来选择取消选择时间。但这种情况只发生在同一组人身上。

class TimeSlotsAdapter(context: Context, arrTimeSlots: List<TimeSlots>?) :
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {

val mContext = context
val mList = arrTimeSlots!!

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
    return TimePickerHolder(LayoutInflater.from(parent?.context).
            inflate(R.layout.item_time_picker, parent, false))
}

override fun getItemCount() = mList.size

override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
    holder?.itemView?.apply {
        with(mList[position]) {
            tvTimeView.text = convertedTime
            if (isSelected) {
                tvTimeView.background = ContextCompat.getDrawable(context,
                        R.drawable.time_rounded_corner_selected)
                tvTimeView.setTextColor(ContextCompat.getColor(context, R.color.white))
            } else {
                tvTimeView.background = ContextCompat.getDrawable(context,
                        R.drawable.time_rounded_corner)
                tvTimeView.setTextColor(ContextCompat.getColor(context, R.color.grey_text_7))
            }
        }
    }
}

inner class TimePickerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    init {
        itemView.setOnClickListener {
            for (i in mList.indices) {
                mList[i].isSelected = false
            }
            mList[adapterPosition].isSelected = true
            notifyDataSetChanged()

        }
    }
}

}


尝试将一个适配器与网格管理器一起使用

GridLayoutManager gridLayoutManager = new GridLayoutManager(getAppContext(), 3); 
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
        @Override
        public int getSpanSize(int position) {
        //define span size for this position
        //for example, if you have 2 column per row, you can implement something like that:
        if(position == youRule) {
            return 3; // 3 item in row
        } else {
            return 1; // 1 item in row
        }
    }
});

此外,您还应该将两个适配器合二为一。与项目的哈希图不同,使用排序列表项目[标题、时间、时间、时间、标题、时间、时间、时间等]。现在您可以简单地检查哪些项目需要标记为选定。

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

Android 在 Adapter kotlin 中选择和取消选择项目时出现问题? 的相关文章

  • Android 中的振动器

    如何创建Vibrator对象并调用vibrate函数 http developer android com reference android os Vibrator html http developer android com refe
  • 运行低于 Lollipop 的设备上的 CameraManager

    我遇到一个问题 我同时使用 Camera 低于 Lollipop 设备 和 CameraManager 类 Lollipop 及以上设备 运行低于 Lollipop 的设备会崩溃 我相信这是因为 import android hardwar
  • 使用意图过滤器从 URL 打开 Android 应用程序不起作用

    我有一个 Android 应用程序 人们用它来替代网站 因此 当用户遇到网站的 URL 时 我想为他们提供在我的应用程序中而不是在浏览器中 打开 URL 的选项 换句话说 我希望出现弹出窗口 让他们在我的应用程序和浏览器 可能还有其他应用程
  • 在Android中,哪种布局更快 1. LinearLayout内的FrameLayout还是2. 一大RelativeLayout?

    我正在考虑视图的两种不同布局安排 这将是 RecyclerView 中的一行 它们是不同的 但它们都可以工作 或者作为 一个容器垂直 LinearLayout 包含多行 FrameLayout 例如LinearLayout gt Frame
  • Android studio总是乱码

    I have change the encode to UTF 8 so I got this problem who can help me I reinstalled it twice but android studio1 4 Alw
  • 在原生 Android 应用程序中集成多个 Unity 游戏

    我有一个原生 Android 应用程序 我想在其中嵌入多个 Unity 游戏 我跟着link https medium com davidbeloosesky embedded unity within android app 7061f4
  • 如何让按钮的角变圆?

    我想制作一个角button圆形的 在 Android 中是否有一种简单的方法可以实现这一点 如果你想要这样的东西 这是代码 1 在您的可绘制文件夹中创建一个 xml 文件 如 mybutton xml 并粘贴以下标记
  • Android EditText 和 SearchView:主要区别是什么(设计除外)?

    我需要在我的 Android 应用程序中实现一个搜索界面 该界面可以过滤多个RecyclerView里面一个ViewPager 我已经实现了EditText and SearchView小部件并尝试查看差异 我感兴趣的听众是 myEditT
  • 在一天中的特定时间设置闹钟

    我正在尝试将闹钟设置在一天中的特定时间 例如 20 15 这是我正在使用的代码 但它不会在 20 15 关闭 Intent intent new Intent AlarmActivity this MyBroadcastReceiver c
  • 使用 Android 解析 JSON 的最有效方法

    我编写了一些代码来解析我的 Android 程序收到的 Google 距离矩阵 JSON 响应 我唯一感兴趣的数据是 距离 值 节点 我的代码可以工作 但似乎必须有一种更简单的方法来做到这一点 距离值节点在 JSON 中嵌套得很深 但是真的
  • NoClassDefFoundError:解析失败:Lio/realm/internal/LinkView

    我正在使用领域 我安装了 Stetho Realm 来查看领域数据 这就是我所做的 buildscript repositories google jcenter dependencies classpath com android too
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • Ctrl 单击 Eclipse 中的类显示二进制/jar 而不是源

    使用Eclipse 版本 Helios 服务版本 2 内部版本号 20110218 0911 与Android插件 我有一个 Android 项目 AndroidUtil 它被标记为我的主要 Android 应用程序的 库 项目 当我按住
  • Retrofit RxAndroid 为 api 调用制作包装器

    我想在改造中为 api 调用创建一个包装器 这样我就可以在常见位置显示 ProgressDialog 并处理常见响应 我通过创建这样的包装器来实现这一点 public static
  • Android - 有没有办法监听 GPS 是否启用或禁用

    我编写此代码是为了接收位置更新 PendingIntent launchIntent PendingIntent getBroadcast context 5000 intent 0 manager requestLocationUpdat
  • popBackStack导致反复调用fragment的oncreateView

    我有 3 个片段 A B C 我编写了一段代码来替换它们并维护 backstack public void addFragment Fragment fragmentToAdd String fragmentTag FragmentMana
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 在 IntelliJ IDEA 11 中编译期间未检测到模块依赖性

    我正在开发一个 Android 应用程序 我正在尝试包含图形视图 https github com jjoe64 GraphView绘制一些图表 需要将其作为模块依赖项包含在内 执行此操作后 IntelliJ IDE 会正确检测到包 我可以
  • 在活动之间共享菜单栏

    我的应用程序上有一个菜单栏 我需要在 5 个活动之间共享该菜单栏 我的菜单栏 5 个允许在活动之间切换的按钮 对于任何活动具有完全相同的 UI 和相同的行为 因此我想共享菜单栏 XML 视图代码和控制器代码 我已经找到了一种使用共享 XML
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权

随机推荐