2016-01-18 115 views
-3

我試圖在我的應用中實現搜索小部件。我從here發現了一個有用的教程。無法實現搜索小部件

My Activity A

但我的應用程序崩潰。

活動A

 @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.create_menu, menu); 
      // Associate searchable configuration with the SearchView 
      SearchManager searchManager = 
        (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
      SearchView searchView = 
        (SearchView) menu.findItem(R.id.search).getActionView(); 
      searchView.setSearchableInfo(
        searchManager.getSearchableInfo(getComponentName())); 
      return true; 
     } 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     switch (item.getItemId()) { 

      case R.id.add: // create new file 
       View menuItemView = findViewById(R.id.add); 
       PopupMenu po = new PopupMenu(HomePage.this, menuItemView); //for drop-down menu 
       po.getMenuInflater().inflate(R.menu.popup_menu, po.getMenu()); 
       po.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem item) { 
         // Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); 
         if ("Create New File".equals(item.getTitle())) { 
          Intent intent = new Intent(HomePage.this, Information.class); // go to Information class 
          startActivity(intent); 

         } else if ("Edit File".equals(item.getTitle())) { 
          Intent intent = new Intent(HomePage.this, Edit.class); 
          startActivity(intent); 
         } 
         return true; 
        } 
       }); 
       po.show(); //showing popup menu 

     } 
     return super.onOptionsItemSelected(item); 
    } 

在XML文件夾搜索

<?xml version="1.0" encoding="utf-8"?> 

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="Search by date" /> 

create_menu

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/search" 
     android:title="Search by date" 
     android:icon="@mipmap/search" 
     app:showAsAction="collapseActionView|ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 

    <item 
     android:icon="@mipmap/menu" 
     android:id="@+id/add" 
     android:orderInCategory="100" 
     android:title="Main Menu" 
     app:showAsAction="always" /> 

</menu> 

mainfest聲明此

<meta-data android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

錯誤的logcat

01-18 18:31:09.298 9215-9215/com.example.project.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.project.myapplication, PID: 9215 
    java.lang.NullPointerException 
      at com.example.project.myapplication.GUI.HomePage.onCreateOptionsMenu(HomePage.java:104) 
      at android.app.Activity.onCreatePanelMenu(Activity.java:2646) 
      at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:298) 
      at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallback 

這是指着searchView.setSearchableInfo(

+0

我錯過了什麼嗎? – Hoo

+0

你使用了proguard然後添加這行progaurd文件-keep類android.support.v7.widget.SearchView {*; } –

+0

@MaheshwarLigade那是什麼?我按照[這](http://developer.android.com/intl/es/training/search/setup.html)教程 – Hoo

回答

1

您應該使用支持搜索查看的支持版本錯誤行:

<item android:id="@+id/action_search" 
    android:title="@string/search_title" 
    android:icon="@android:drawable/ic_menu_search" 
    app:showAsAction="ifRoom" 
    app:actionViewClass="android.support.v7.widget.SearchView" /> 

你會加入Manife st.xml正確的意圖過濾器

 <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
+0

謝謝!!!完美的工作:) – Hoo