2013-05-21 2 views
1

Я пытаюсь реализовать функцию поиска в своем приложении Android с помощью SearchView в макете своего приложения. Я целенаправленно решил использовать его в макете, а не в панели действий.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 (макет, в котором находится 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());} 
    } 
} 
+0

возможный дубликат [Невозможно получить searchview в панели действий для работы] (http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Clint

ответ

3

Вам не хватает SearchView#setOnQueryTextListener. Вам необходимо переопределить метод OnQueryTextSubmit() для фактического выполнения и обработки вашего поиска.

EDIT: Я предполагаю, что вы запрашиваете базу данных и используете курсор для результатов.

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()' не стоит. Проблема вы здесь, похоже, отсутствует параметр 'default_searchable' в AndroidManifest. – Clint

1

Для быстрого просмотра кажется, что вы пропустили настройку default_searchable в своем AndroidManifest.

При настройке для 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 для только тогда, когда вы делаете поиск и отображение запросов в одной и той же деятельности.)

Смежные вопросы