【问题标题】:Trouble in adding a search widget in actionbar在操作栏中添加搜索小部件时遇到问题
【发布时间】:2015-07-02 05:53:57
【问题描述】:

我想在this 之后的操作栏中添加一个搜索功能作为指导,但我仍然遇到这些错误。

    07-02 13:36:05.175  21813-21813/com.example.fieldbookv2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.fieldbookv2, PID: 21813
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference
            at com.example.fieldbookv2.LoginActivity.onCreateOptionsMenu(LoginActivity.java:1621)
            at android.app.Activity.onCreatePanelMenu(Activity.java:2823)
            at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:277)
            at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:84)
            at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:273)
            at android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.java:1111)
            at android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.java:1396)
            at android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.java:89)
            at android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.java:126)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我的 main_activity_action.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/tools">
<item android:id="@+id/action_search"
      android:title="Search"
      android:icon="@drawable/ic_search_white"
      app:showAsAction="ifRoom|collapseActionView"
      app:actionViewClass="android.widget.SearchView"/>
</menu>

可搜索的.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
      android:label="@string/search"
      android:hint="@string/enter" />

LoginActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main_actions, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search) .getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
  return super.onCreateOptionsMenu(menu);
}

和 AndroidManifest.xml

<activity
    android:name="com.example.fieldbookv2.LoginActivity"
    android:label="@string/title_activity_login" >
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchResultsActivity" />
</activity>

知道为什么它说空引用吗?

【问题讨论】:

  • 您想在应用内按名称搜索???
  • 我想先检查一下点击后搜索图标是否有效,并让用户输入。

标签: android search null android-actionbar widget


【解决方案1】:

修复了错误。 main_actions_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">
        <item android:id="@+id/action_search"
              android:title="Search"
              android:icon="@drawable/ic_search_white"
              app:showAsAction="ifRoom|collapseActionView"
              app:actionViewClass="android.widget.SearchView"/>
   </menu>

删除不必要的标签并将“yourapp”更改为“app,因为 app 是分配的。

【讨论】:

    【解决方案2】:

    试试这个,我使用的是 EditText 而不是操作栏:

     <EditText
            android:id="@+id/members_search"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:padding="10dp"
            android:ems="8"
            android:singleLine="true"
            android:background="@drawable/round_corner_edittext"
            android:hint="Search Box" />
    

    在课堂上:

    members_search.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub
                adapter_members.getFilter().filter(s.toString());
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    
            }
        });
    

    【讨论】:

    • 谢谢!但是有没有其他方法可以通过操作栏实现它?
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2023-04-10
    • 2016-05-28
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多