繁体   English   中英

Android androidx.SearchView 不工作

[英]Android androidx.SearchView is not working

我在我的项目中的 MaterialToolBar 中实现了 SearchView。 除了最后一步,一切正常。 当我在搜索栏中输入任何内容并单击键盘查找按钮时,它不会显示任何内容。 请帮忙。

我的问题视频https://drive.google.com/file/d/1GpE16D3drLGYp0ZetHgNlT8s7qZSFuWk/view?usp=drivesdk

菜单.xml

    <item
    android:id="@+id/menu_search"
    android:title="@string/search"
    android:icon="@drawable/ic_search"
    app:showAsAction="always|collapseActionView"
    app:actionViewClass="androidx.appcompat.widget.SearchView" />

活动.xml

<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/category1_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingEnd="10dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:background="@color/dark_blue"
    app:menu="@menu/cart_share"
    tools:ignore="RtlSymmetry">

    <ImageView
        android:id="@+id/img_back_all_category"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:contentDescription="TODO"
        android:src="@drawable/ic_keyboard_arrow_left" />

    <TextView
        android:id="@+id/tv_all_categories"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="@string/product_name"
        android:fontFamily="@font/montserrat"
        android:textStyle="bold"
        android:textSize="20sp"
        android:textColor="@color/white"
        android:layout_marginStart="25sp"/>
</com.google.android.material.appbar.MaterialToolbar>

java代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.cart_search_menu, menu);
    MenuItem menuItem = menu.findItem(R.id.menu_search);
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setQueryHint("Type here to search");
    searchView.setMaxWidth(android.R.attr.width);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            //getSearchResults(query); Also tried
            getSearchResults(searchView.getQuery().toString());
            if( ! searchView.isIconified()) {
                searchView.setIconified(true);
            }
            menuItem.collapseActionView();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.cart_search_menu, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        
        SearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                
                // your code
                
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                // your code
                return false;
            }
        });
        return true;
    }

检查这个截图试试这个

在菜单文件中:

<item
    android:id="@+id/actionTenantSearch"
    android:icon="@drawable/ic_search"
    android:title="@string/search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="androidx.appcompat.widget.SearchView"
    />

在 kotlin 文件中:

  private var searchItem : MenuItem? = null
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    inflater.inflate(R.menu.search_tenant_menu, menu)
    searchItem = menu.findItem(R.id.actionTenantSearch)

    val searchView = searchItem?.actionView as SearchView
    searchView.setOnQueryTextListener(object :
        SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(s: String): Boolean {
            CommonUtils.showToast(requireContext(), s)
            searchView.clearFocus()
            return true
        }

        override fun onQueryTextChange(s: String): Boolean {

            return true
        }
    })
    super.onCreateOptionsMenu(menu, inflater)
}

@vaibhav 您是否在列表视图或回收站视图中实现了可过滤的 class。 之后在您的搜索查询中调用该可过滤方法。 你会得到适当的 reault 像这样

公共 class 适配器名称扩展 RecyclerView.Adapter<ContactAdapter.MyViewHolder> 实现可过滤 {

}

CustomFilter 过滤器;

@Override
public Filter getFilter() {
    if (filter == null) {
        filter = new CustomFilter();
    }
    return filter;
}

class CustomFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        // TODO Auto-generated method stub
        FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            //CONSTARINT TO UPPER
            constraint = constraint.toString().toUpperCase();
            ArrayList<AllInOnetItem> filters = new ArrayList<AllInOnetItem>();
            //get specific items
            for (int i = 0; i < filterList.size(); i++) {
                if (filterList.get(i).getName().toUpperCase().contains(constraint)) {
                    AllInOnetItem p = new AllInOnetItem(filterList.get(i).getName(), filterList.get(i).getNumber(),filterList.get(i).getEmail());
                    filters.add(p);
                }
            }
            results.count = filters.size();
            results.values = filters;
        } else {
            results.count = filterList.size();
            results.values = filterList;
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        // TODO Auto-generated method stub
        allInOnetItems = (ArrayList<AllInOnetItem>) results.values;
        notifyDataSetChanged();
    }
}

之后我更改了代码行的顺序,它运行良好。

前:

super.onCreate(savedInstanceState);
Toolbar toolbar = findViewById(R.id.category1_toolbar);
setSupportActionBar(toolbar);
setContentView(R.layout.activity_product_list);

后:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_list);
Toolbar toolbar = findViewById(R.id.category1_toolbar);
setSupportActionBar(toolbar);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM