Android搜索视图返回null

问题描述 投票:0回答:1

我正在尝试在操作栏中使用SearchView(仅用于一个片段),但SearchView始终返回null。

片段


import android.os.Bundle
import android.view.*
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import com.StockMarketAlarms.StockAlarm.R
import com.google.firebase.auth.FirebaseAuth


class SearchFragment : Fragment() {
    private lateinit var auth: FirebaseAuth

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val root = inflater.inflate(R.layout.fragment_search, container, false)
        setHasOptionsMenu(true)
        return root
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.search_menu, menu)


        val searchView: SearchView = menu.findItem(R.id.menuitem_search) as SearchView
        searchView.setMaxWidth(Int.MAX_VALUE)
    }
}

加载在扩展AppCompatActivity的tabactivity中

搜索菜单看起来像这样search_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu 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.support.v7.widget.SearchView
        android:id="@+id/menuitem_search"
        android:icon="@drawable/search_black_48"
        app:actionViewClass="android.widget.SearchView"
        android:title="@string/title_search"
        app:searchIcon="@drawable/search_black_48"
        app:showAsAction="collapseActionView|ifRoom"
        app:queryBackground="@color/colorWhite"
        app:iconifiedByDefault="false" />
</menu>

我不明白为什么它返回null,我尝试了很多。

 Process: com.jfvh.stockalarm, PID: 1845
    kotlin.TypeCastException: null cannot be cast to non-null type androidx.appcompat.widget.SearchView
        at com.jfvh.stockalarm.activities.fragments.SearchFragment.onCreateOptionsMenu(SearchFragment.kt:48)
        at androidx.fragment.app.Fragment.performCreateOptionsMenu(Fragment.java:2711)
        at androidx.fragment.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManagerImpl.java:2711)
        at androidx.fragment.app.Fragment.performCreateOptionsMenu(Fragment.java:2713)
        at androidx.fragment.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManagerImpl.java:2711)
        at androidx.fragment.app.FragmentController.dispatchCreateOptionsMenu(FragmentController.java:386)
        at androidx.fragment.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:326)
        at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:94)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onCreatePanelMenu(AppCompatDelegateImpl.java:2830)
        at androidx.appcompat.app.AppCompatDelegateImpl.preparePanel(AppCompatDelegateImpl.java:1746)
        at androidx.appcompat.app.AppCompatDelegateImpl.doInvalidatePanelMenu(AppCompatDelegateImpl.java:2026)
        at androidx.appcompat.app.AppCompatDelegateImpl$2.run(AppCompatDelegateImpl.java:260)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
android android-actionbar searchview
1个回答
0
投票

[search_menu.xml有错误。

应该是:

<?xml version="1.0" encoding="utf-8"?>
<menu 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">

    <!-- tag name should be <item> -->
    <item 
        android:id="@+id/menuitem_search"
        android:icon="@drawable/search_black_48"
        app:actionViewClass="android.widget.SearchView"
        android:title="@string/title_search"
        app:searchIcon="@drawable/search_black_48"
        app:showAsAction="collapseActionView|ifRoom"
        app:queryBackground="@color/colorWhite"
        app:iconifiedByDefault="false"/>
</menu>

来源:https://developer.android.com/training/search/setup#add-sv

菜单仅允许使用两个标签<group><item>enter image description here

对于动作视图类,您基本上可以选择任何东西:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.