搜索视图在Android中不起作用

时间:2016-11-15 19:01:35

标签: android searchview

我有一个Listview,它显示从URL获取的鲜花的名称(JSON数据)。我创建了一个类型为Class" Flower"我已经保存了JSON数据中的所有鲜花信息。 我在应用程序中添加了SearchView。它在应用程序中正确配置但当我在其中输入一些文本并单击移动键盘上的搜索按钮时,之后就没有动作了。

 @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后,流程会在哪里进行?

1 个答案:

答案 0 :(得分:0)

您在清单的活动级别中缺少android:launchMode="singleTop"

修改 您还需要使用以下代码

在xml目录中创建searchable.xml文件

&#13;
&#13;
<?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" />
&#13;
&#13;
&#13;

然后在您的清单中为相同的活动添加以下元数据

&#13;
&#13;
<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>
&#13;
&#13;
&#13;