11

Tôi đã theo dõi this Android guide để thêm thanh tìm kiếm vào một hoạt động. Quá trình cài đặt như sau:searchManager.getSearchableInfo (getComponentName()) trả về null

res/menu/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/search" 
    android:title="@string/menu_search" 
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="collapseActionView|ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
<item 
    android:id="@+id/menu_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/menu_settings" 
    android:icon="@drawable/ic_menu_settings"/> 

</menu> 

res/xml/searchable.xml: lối vào

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

Hoạt động trong file manifest:

<activity 
     android:name="de.ivu.realtime.app.activity.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value="de.ivu.realtime.app.activity.MainActivity" /> 
    </activity> 

và mã trong MainActivity:

@SuppressLint("NewApi") 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    this.getMenuInflater().inflate(R.menu.activity_main, menu); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    { 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     searchView.setSearchableInfo(searchableInfo); 
    } 

    return true; 

Cuộc gọi đến searchManager.getSearchableInfo(getComponentName()); luôn trả về null. Tôi đã nhìn thấy điều này trong các câu hỏi khác trên stackoverflow, tuy nhiên, không có giải pháp nào được trình bày ở đó dường như áp dụng cho trường hợp của tôi.

  • menu XML có một tiêu đề <?xml version="1.0" encoding="utf-8"?>
  • chuỗi XML tìm kiếm đã không mã hóa cứng
  • đổi tên menu không hoạt động
  • làm sạch và xây dựng lại không làm các trick hoặc

Mọi trợ giúp đều được đánh giá cao. Cảm ơn!

+0

bản sao có thể có của [Không thể tìm kiếm trong thanh tác vụ để hoạt động] (http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Krizai

Trả lời

9

Thêm nó vào hoạt động, nơi bạn đã đặt SearchView bạn

<meta-data 
    android:name="android.app.default_searchable" 
    android:value=".activity_that_handles_the_search" /> 

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

Cảm ơn bạn đã trả lời. 'SearchView' nằm trong' ActionBar' (xem câu hỏi được cập nhật). Vì 'MainActivity' có tài nguyên để cung cấp kết quả tìm kiếm, tôi đã thêm mã của bạn vào phần' MainActivity' của tệp kê khai. Tuy nhiên, 'searchManager.getSearchableInfo (getComponentName());' trả về 'null'. – Chris

+0

Đã cập nhật câu trả lời. Hãy thử áp dụng thêm một bộ lọc ý định nữa. –

+0

Cảm ơn, nó hoạt động! Sử dụng hướng dẫn khác này http://developer.android.com/guide/topics/search/search-dialog.html, tôi cũng đã tìm ra điều này :-). – Chris

2

Trong trường hợp của tôi vấn đề là sai lầm của tôi trong hội nhập với ActionBarSherlock. Trong trường hợp này, android:actionViewClass phải là com.actionbarsherlock.widget.SearchView thay vì android.widget.SearchView. Tôi biết điều này nghe có vẻ ngu ngốc, nhưng tôi đã dành 20 phút cố gắng tìm ra lý do tại sao searchViewnull trong mã của tôi tương tự như của bạn.

+0

Vấn đề của tôi là một cách khác. Tôi đã tích hợp ActionBarSherlock và điều này đã bị xóa trong bản cập nhật ứng dụng. com.actionbarsherlock.widget.SearchView cần được xóa và thay thế bằng android.widget.SearchView –

1

Thay thế:

android:actionViewClass="android.widget.SearchView" 

Với:

app:actionViewClass="android.widget.SearchView" 

app thường được sử dụng nếu bạn đang sử dụng thư viện hỗ trợ.

+0

Siêu! ... Cảm ơn – Khalil