微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin 必须在 imageview 上单击两次才能更改图标?

如何解决Kotlin 必须在 imageview 上单击两次才能更改图标?

最近几天我遇到了一个问题。我试过在 Stackoverflow 上提问,但要么使用了太多不适合答案的代码,要么无法正确解释自己,所以最后一次尝试。我正在使用 Room/Kotlin 进行一个项目。我有一个 ImageView 有两个不同的可绘制对象,用于类似/不同的功能。我现在的问题是当单击 ImageView 时,drawable 需要单击两次才能显示“喜欢”,我还没有想到的是能够选择多个“收藏夹”并显示图标。多个收藏夹更像是一种需要,我只是想弄清楚它的要点。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:background="?attr/selectableItemBackground"
        android:clickable="true"
        android:paddingBottom="@dimen/row_padding"
        android:paddingLeft="@dimen/activity_margin"
        android:paddingRight="@dimen/activity_margin"
        android:paddingTop="@dimen/row_padding"
        android:focusable="true">
    
        <ImageButton
            android:id="@+id/starPubs"
            android:layout_width="@dimen/thumbnail"
            android:layout_height="@dimen/thumbnail"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/row_padding"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:background="@drawable/ic_star_outline" />
    
        <TextView
            android:id="@+id/pubNumber"
            android:layout_toRightOf="@id/starPubs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif-medium"
            android:textColor="@color/pub_big_text"
            android:textSize="@dimen/pub_name" />
    
        <TextView
            android:id="@+id/pubTitle"
            android:layout_toRightOf="@id/starPubs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/pubNumber"
            android:maxLines="2"
            android:ellipsize="end"
            android:textAllCaps="false"
            android:fontFamily="@font/noto_sans"
            android:textColor="@color/pub_little_text"
            android:textSize="@dimen/pub_number" />
    
        <TextView
            android:id="@+id/pubLastAction"
            android:layout_toRightOf="@id/starPubs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/pubTitle"
            android:textAllCaps="false"
            android:fontFamily="@font/noto_sans"
            android:textColor="@color/pub_little_text"
            android:textSize="@dimen/pub_last_action" />
    
        <TextView
            android:id="@+id/pubCertDate"
            android:layout_toRightOf="@id/starPubs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/pubLastAction"
            android:textAllCaps="false"
            android:fontFamily="@font/noto_sans"
            android:textColor="@color/pub_little_text"
            android:textSize="@dimen/pub_last_action" />
    </RelativeLayout>
    
    ```
    package com.drewcodesit.afiexplorer.adapters
    
    import android.annotation.SuppressLint
    import android.content.Context
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.Filter
    import android.widget.Filterable
    import android.widget.ImageView
    import android.widget.TextView
    import androidx.recyclerview.widget.RecyclerView
    import com.drewcodesit.afiexplorer.Pubs
    import com.drewcodesit.afiexplorer.R
    import com.drewcodesit.afiexplorer.database.FavoriteEntity
    import com.drewcodesit.afiexplorer.main.MainActivity
    import es.dmoral.toasty.Toasty
    import java.text.SimpleDateFormat
    import java.util.*
    import kotlin.collections.ArrayList
    
    
    /**
     * Created by drewstephens on 5/13/2021.
     */
    class MainAdapter(private val context: Context,private val pubsList: ArrayList<Pubs>,private val listener: PubsAdapterListener)
        : RecyclerView.Adapter<MainAdapter.MyViewHolder>(),Filterable {
    
        private var pubsListFiltered: ArrayList<Pubs>
    
        init {
            pubsListFiltered = pubsList
        }
    
        override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): MyViewHolder {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.pub_row_item,parent,false)
            return MyViewHolder(view)
        }
    
        @SuppressLint("SetTextI18n","SimpleDateFormat")
        override fun onBindViewHolder(holder: MyViewHolder,position: Int) {
            val publication = pubsListFiltered[position]
    
            holder.starPubs.setonClickListener {
                if (MainActivity.favoriteDatabase!!.favoriteDAO()!!.isFavorite(publication.id) == 1) holder.starPubs.setimageResource(R.drawable.ic_star_filled) else holder.starPubs.setimageResource(R.drawable.ic_star_outline)
                val favoriteEntity = FavoriteEntity()
                val id = publication.id
                val number = publication.Number
                val title = publication.Title
                val url = publication.DocumentUrl
                favoriteEntity.id = id
                favoriteEntity.Number = number
                favoriteEntity.Title = title
                favoriteEntity.DocumentUrl = url
    
                if (MainActivity.favoriteDatabase!!.favoriteDAO()!!.isFavorite(id) != 1) {
                    holder.starPubs.setimageResource(R.drawable.ic_star_filled)
                    MainActivity.favoriteDatabase!!.favoriteDAO()!!.addData(favoriteEntity)
                    Toasty.success(context,"Added to Favorites",Toasty.LENGTH_SHORT,true).show()
                    notifyItemChanged(holder.absoluteAdapterPosition)
                    notifyDataSetChanged()
                } else {
                    //holder.starPubs.setimageResource(R.drawable.ic_star_outline)
                    //MainActivity.favoriteDatabase!!.favoriteDAO()!!.delete(favoriteEntity)
                    //MainActivity.favoriteDatabase!!.favoriteDAO()!!.deleteall()
                    //Toasty.info(context,"Removed from Favorites",Toasty.LENGTH_SHORT).show()
                    notifyItemRemoved(position)
                    notifyItemRangeChanged(holder.absoluteAdapterPosition,pubsListFiltered.size)
                    notifyDataSetChanged()
                }
            }
    
            holder.also { h ->
                with(publication) {
                    // Converts Milliseconds to Readable Date Format
                    // Certified Current Date from EPubs Site
                    val rawdate = CertDate
                    val calendar = Calendar.getInstance()
                    val datereip = rawdate.replace("/Date(","").replace(")/","")
                    val timeInMillis = java.lang.Long.valueOf(datereip)
                    calendar.timeInMillis = timeInMillis
    
                    // Converts Calendar Instance to
                    val certDate = SimpleDateFormat("MMM yyyy",Locale.getDefault()).format(Date(timeInMillis))
    
                    // Textfields
                    h.pub_number.text = Number
                    h.pub_title.text = Title
                    h.pub_last_action.text = "Last Action: $LastAction"
                    h.pub_cert_date.text = "Certified Current: $certDate"
                }
            }
        }
    
        override fun getItemCount(): Int {
            return pubsListFiltered.size
        }
    
        override fun getItemId(position: Int): Long {
            return position.toLong()
        }
    
        override fun getItemViewType(position: Int): Int {
            return position
        }
    
        override fun getFilter(): Filter {
            return object : Filter() {
                override fun performFiltering(constraint: CharSequence?): FilterResults {
                    val charString = constraint?.toString() ?: ""
                    pubsListFiltered = if (charString.isEmpty()) pubsList else {
                        val filteredList = ArrayList<Pubs>()
                        pubsList
                                .filter { it.Title!!.toLowerCase(Locale.ROOT).contains(charString.toLowerCase(Locale.ROOT)) or it.Number!!.contains(constraint!!) }
                                .forEach { filteredList.add(it) }
                        filteredList
                    }
                    return FilterResults().apply { values = pubsListFiltered }
                }
    
                override fun publishResults(constraint: CharSequence?,results: FilterResults?) {
                    pubsListFiltered = results?.values as ArrayList<Pubs>
                    notifyDataSetChanged()
    
                }
            }
        }
    
        inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    
            var pub_number: TextView = view.findViewById(R.id.pubNumber)
            var pub_title: TextView = view.findViewById(R.id.pubTitle)
            var pub_last_action: TextView = view.findViewById(R.id.pubLastAction)
            var pub_cert_date: TextView = view.findViewById(R.id.pubCertDate)
            var starPubs: ImageView = view.findViewById(R.id.starPubs)
    
    
            init {
                view.setonClickListener {
                    listener.onPubsSelected(pubsListFiltered[bindingAdapterPosition])
                }
            }
        }
    
    
        interface PubsAdapterListener {
            fun onPubsSelected(pubs: Pubs)
        }
    }
    
    ```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。