2016-11-15 63 views
0

我有一個列表視圖,顯示從URL(JSON數據)中獲取的鮮花的名稱。我創建了一個類型爲「Flower」的ArrayList,其中保存了JSON數據中的所有鮮花信息。 我已經在應用程序中添加了SearchView。它在應用程序中正確配置,但是當我在其中輸入一些文本並單擊移動鍵盤上的搜索按鈕後,在此之後不再執行任何操作。搜索視圖在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> 

當我點擊搜索查看圖標並輸入一些文本,並從鍵盤按下Enter鍵,它沒有給我任何結果。 我還有一個疑問,在將查詢輸入到searchView之後,流程將在哪裏進行?

回答

0

你在你的清單

編輯的活動水平失蹤android:launchMode="singleTop" 您還需要創建一個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

可以請你告訴我的流動,當我在查詢到搜索查看類型。它在哪裏呢? –

+0

我已經添加了上面提出的所有這些東西,但它不起作用。 –

+0

@ shikher.mishra假設一切正常。您應該能夠從'handleIntent'的'query'中獲取字符串查詢。您還需要在'onNewIntent'中添加'setIntent(intent)' –