2016-11-15 4 views
0

У меня есть Listview, который отображает имена цветов, которые выгружаются из URL (данные JSON). Я создал ArrayList класса типа «Цветок», в котором я сохранил все данные о цветах, которые есть в данных JSON. Я добавил SearchView в приложение. Он правильно настроен в приложении, но когда я ввожу в него какой-то текст и нажимаю кнопку поиска на клавиатуре мобильного телефона, после этого после этого никаких действий не предпринимается.Search View не работает в android

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.titlebar, menu); 
     SearchManager searchManager=(SearchManager)getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView=(SearchView)menu.findItem(R.id.new_search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this,FrontPage.class))); 


     return true; 
    } 

Это мой файл SearchResultActivity.java.

package com.example.hsports.flowers; 

import android.app.SearchManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class SearchResultsActivity extends AppCompatActivity { 

    FrontPage frontPage=new FrontPage(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_search_results); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     handleIntent(getIntent()); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 


    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 

     handleIntent(getIntent()); 

    } 


    private void handleIntent(Intent intent) { 

     TextView name=(TextView)findViewById(R.id.displayName); 
     TextView url=(TextView)findViewById(R.id.displayUrl); 


     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 

      for(Flower f:frontPage.flowersList) 
      { 
       if(f.name.equalsIgnoreCase(query)) 
       { 

        name.setText(f.name); 
        url.setText(f.url); 

       } 
      } 



     } 
    } 
} 

Я настроил эту деятельность в AndroidManifest.xml файле как:

<activity 
      android:name=".SearchResultsActivity" 
      android:label="@string/title_activity_search_results" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 


     </activity> 

Когда я нажав на иконку SearchView и введя текст и нажав клавишу ввода с клавиатуры, ее не дает мне никакого результат. У меня есть еще одно сомнение, откуда будет идти поток после ввода запроса в searchView?

ответ

0

У вас не хватает android:launchMode="singleTop" уровня активности вашего манифеста

EDIT: Кроме того, необходимо создать searchable.xml файл в каталоге 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="Search" />

затем в вашем манифесте для того же действия добавьте следующие метаданные

<activity android:name=".SearchResultsActivity" 
 
      android:label="@string/title_activity_search_results" 
 
      android:theme="@style/AppTheme.NoActionBar" 
 
      android:launchMode="singleTop"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.SEARCH" /> 
 
      </intent-filter> 
 
      <meta-data android:name="android.app.searchable" 
 
         android:resource="@xml/searchable" /> 
 
     </activity>

+0

Пожалуйста, вы можете сказать мне поток, когда я набираю в запросе к SearchView. Где это происходит после этого? –

+0

Я добавил все те вещи, которые вы предложили выше, но не работает. –

+0

@ shikher.mishra предполагается, что все работает. Вы должны иметь возможность захватить строковый запрос из 'query' в' handleIntent'. Вам также нужно добавить 'setIntent (намерение)' в 'onNewIntent' –

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