2016-11-15 66 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)' –