2013-05-21 37 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的指南中所示的例子是,只有当您正在搜索,并在同一个活动显示的搜索。)的

相关问题