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 中选择和取消选择项目时出现问题? 的相关文章

  • 如何在 StateListDrawable 中设置可绘制对象的 alpha 值?

    我想在按下时更改可绘制对象的 alpha 值 因此 我创建了两个可绘制对象并将它们放入 StateListDrawable 中 并设置按下状态的 alpha 值 但它就是行不通 StateListDrawable content new S
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • Android Studio磁盘空间不足如何解决?

    我随机收到此错误 并且不确定为什么 Android Studio 的磁盘空间变低 Android Studio 系统目录分区磁盘空间不足 Update 此应用程序安装在运行 10 10 1 的 Mac 上 具有 251GB 内部存储和占用
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • PhoneGap 是应用程序开发的好选择吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • MPAndroidChart:组合图表

    我在用MPAndroidChart 库 https github com PhilJay MPAndroidChart 我想用CombinedChart创建这样的图表 那可能吗 我尝试了一下 但似乎不起作用 因为 这些条目没有按我的预期工作
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • SambaFileInputStream 和 FileInputStream 有什么不同?

    我需要从 samba 服务器流式传输视频 并且我使用 nanohttpd 在我的项目中创建简单的服务器 当我使用本地文件中的 fileinputstream 时 视频视图可以按设置播放视频 http localhost 8080 publi

随机推荐