首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决androidx.appcompat.widget.SearchView不能转换为android.widget.SearchView的问题

如何解决androidx.appcompat.widget.SearchView不能转换为android.widget.SearchView的问题
EN

Stack Overflow用户
提问于 2021-11-24 06:30:49
回答 2查看 1.5K关注 0票数 1

我知道关于这个错误有很多疑问。尝试了许多解决方案,我意识到在我的案例中有不同的地方。有人能帮忙吗?我尝试将searchview应用于recyclerview,并在reyclerview adapter中插入filter(),在mainactivity中插入setOnQueryTextListener

但是我得到了以下错误:androidx.appcompat.widget.SearchView cannot be cast to android.widget.SearchView

MainActivity.kt

代码语言:javascript
运行
复制
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Canvas
import android.graphics.drawable.Drawable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.co_investorux_ui.databinding.ActivityMainBinding
import com.example.co_investorux_ui.databinding.ItemViewBinding
import com.sothree.slidinguppanel.SlidingUpPanelLayout
import java.util.*
import kotlin.collections.ArrayList
import android.app.SearchManager
import android.widget.SearchView
import android.widget.SearchView.OnQueryTextListener

...

val searchview :SearchView = findViewById(R.id.search_view)
        searchview.setOnQueryTextListener(object:SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(query: String?): Boolean {
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                adapter.filter.filter(newText)
                return false
            }
        })

...

getFilter()

代码语言:javascript
运行
复制
override fun getFilter(): Filter {
            return object : Filter() {
                override fun performFiltering(charSequence: CharSequence): FilterResults {
                    val charString = charSequence.toString()
                    if (charString.isEmpty()) {
                        searchList = itemList
                    } else {
                        val filteredList = ArrayList<CoinList>()

                        for (coin in itemList) {
                            if (coin.name.contains(charString)) {
                                filteredList.add(coin)
                            }
                        }
                        searchList = filteredList
                    }
                    val filterResults = FilterResults()
                    filterResults.values = searchList
                    return filterResults
                }

                override fun publishResults(
                    charSequence: CharSequence,
                    filterResults: FilterResults
                ) {
                    searchList = filterResults.values as ArrayList<CoinList>
                    notifyDataSetChanged()
                }
            }
        }

activity_main.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    app:umanoDragView="@id/slide_layout"
    app:umanoPanelHeight="16dp"
    tools:context=".MainActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/first_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.appcompat.widget.SearchView
            android:id="@+id/search_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@id/recyclerview"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/inside_layout"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

</com.sothree.slidinguppanel.SlidingUpPanelLayout>

我不知道什么是我的错。我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-24 06:37:12

在你的进口品中,

替换

代码语言:javascript
运行
复制
import android.widget.SearchView

使用

代码语言:javascript
运行
复制
import androidx.appcompat.widget.SearchView
票数 2
EN

Stack Overflow用户

发布于 2021-11-24 06:52:36

在xml中,您使用androidx SearchView。

代码语言:javascript
运行
复制
 androidx.appcompat.widget.SearchView

但是在你的kotlin代码中你是android.widget.SearchView

代码语言:javascript
运行
复制
import android.widget.SearchView

这就是为什么不能投

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70091588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档