2013-05-21 121 views
1

我想在我的應用程序的佈局中使用SearchView在我的android應用程序中實現搜索功能。我故意選擇在佈局中而不是在Action Bar中。SearchView不搜索

問題是,一旦我輸入搜索文本並敲擊鍵盤上的輸入/搜索鍵,什麼都不會發生。可搜索的意圖從未被調用過。我覺得我必須錯過導致搜索不觸發的事情

如果我沒有在下面以正確的格式包含代碼,我很抱歉。請讓我知道是否有任何其他信息可以幫助。提前致謝!

艙單

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.lotr.arda.MainActivity" 
     android:label="@string/app_name" > 

    </activity> 
    <activity 
     android:name=".WebActivity" 
     android:theme="@android:style/Theme.NoTitleBar" > 
     </activity> 
     <activity 
     android:name=".menuActivity" 
     android:theme="@android:style/Theme.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     </activity> 
     <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"> 
     </activity> 
     <activity android:name=".searchActivity" > 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable"/> 
</activity> 
</application> 
</manifest> 

RES/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="@string/searchhint" > 
</searchable> 

SearchActivity.java

package com.lotr.arda; 

import android.app.ListActivity; 
import android.app.SearchManager; 
import android.content.Intent; 
import android.os.Bundle; 

public class searchActivity extends ListActivity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search_page); 

    // Get the intent, verify the action and get the query 
    Intent intent = getIntent(); 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 

     System.out.println(query); 
     //doMySearch(query); 
    } 
} 
} 

menuActivity.java(佈局,其中搜索查看位於)

package com.lotr.arda; 

import com.google.ads.AdRequest; 
import com.google.ads.AdView; 
import android.app.Activity; 
import android.app.SearchManager; 
import android.app.SearchableInfo; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.SearchView; 



public class menuActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.menu_page); 
    try{  

     AdView myad = (AdView) findViewById(R.id.ad); 
     AdRequest adRequest = new AdRequest(); 

     myad.loadAd(adRequest); 

     SearchManager searchManager = (SearchManager)getSystemService(SEARCH_SERVICE); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 

     SearchView sv = (SearchView)findViewById(R.id.searchView1); 
     sv.setSearchableInfo(searchableInfo); 

     Button alpha = (Button)this.findViewById(R.id.button1); 
     alpha.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
         Intent intent = new Intent(menuActivity.this, MainActivity.class); 
         startActivity(intent);      
       }});    
    }catch(Exception e) {System.out.println(e.toString());} 
    } 
} 
+0

可能重複[無法獲得在操作欄中的searchview工作](http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Clint

回答

3

您錯過了SearchView#setOnQueryTextListener。您需要覆蓋OnQueryTextSubmit()方法才能真正執行並處理您的搜索。

編輯:我假設你正在查詢一個數據庫,並使用光標的結果。

mSearchView.setOnQueryTextListener(new OnQueryTextListener() 
    { 
     @Override 
     public void onQueryTextSubmit(String query) { 
      Cursor c = getContentResolver.query(URI, null, "col_1 = ? OR col_2 = ?", new String[] { query, query }, null); 
      //Do whatever you want with your Cursor here 
     } 
    } 
); 
+0

謝謝Vinay。你碰巧有這樣的例子嗎?我試圖添加 SearchView SV =(SearchView)findViewById(R.id.searchView1); \t \t \t SV.setOnQueryTextListener(新OnQueryTextListener(){ 到我的Java文件,但林不知道如何添加你所提到的 – Chris2222000

+0

更新我的回答 –

+2

到'setOnQueryTextListener()的調用倍率'是沒有必要的。這個問題你這裏似乎是AndroidManifest下缺少的'default_searchable'設置。 – Clint

1

快速查看看起來您錯過了AndroidManifest中的default_searchable設置。

在活動設置MainActivity,你應該增加這個

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

確保您searchables.xml文件是在正確的位置(即,在您的res/xml/文件夾中)和同一文件不包含任何錯誤 - 否則你會發現(SearchManager)getSystemService(Context.SEARCH_SERVICE).getSearchableInfo(componentName)將返回null,破壞你的搜索功能。

(另外,請確保您以適當的方式設置componentName,因爲Android的指南中所示的例子是,只有當您正在搜索,並在同一個活動顯示的搜索。)的

相關問題