SearchView不搜索

时间:2013-05-21 19:30:03

标签: android searchview

我正在尝试使用我的应用程序布局中的SearchView在我的Android应用程序中实现搜索功能。我故意选择在布局中而不是在操作栏中使用它。

问题是,一旦我输入搜索文本并按下键盘上的输入/搜索键,就不会发生任何事情。永远不会调用可搜索的意图。我觉得我必须遗漏一些导致搜索不能触发的内容

如果我没有在下面以正确的格式包含代码,我道歉。如果有任何其他信息可以提供帮助,请与我们联系。提前致谢!

清单          

<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(searchview所在的布局)

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());}
    }
}

3 个答案:

答案 0 :(得分:3)

您错过了SearchView#setOnQueryTextListener。您需要覆盖OnQueryTextSubmit()方法才能实际执行和处理搜索。

编辑:我假设您正在查询数据库并使用Cursor获取结果。

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
        }
    }
);

答案 1 :(得分:1)

要快速查看,您的AndroidManifest中似乎错过了default_searchable设置。

在MainActivity的活动设置下,您应该添加此

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

答案 2 :(得分:0)

确保您的searchables.xml文件位于正确的位置(即res/xml/文件夹中)并且同一文件不包含任何错误 - 否则您会发现(SearchManager)getSystemService(Context.SEARCH_SERVICE).getSearchableInfo(componentName)将返回null,从而破坏您的搜索功能。

(另外,请确保以适当的方式设置componentName,因为Android指南中显示的示例仅适用于您在同一活动中进行搜索和显示搜索时。)