搜索视图在 android 中不起作用
Search View is not working in android
我有一个列表视图,它显示从 URL(JSON 数据)中获取的花的名称。我制作了一个 class "Flower" 类型的 ArrayList,其中保存了 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 配置为:
<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>
当我单击搜索视图图标并输入一些文本并从键盘按回车键时,它没有给我任何结果。
我还有一个疑问,在搜索视图中输入查询后,流程会去哪里?
您在清单的 activity 层 android:launchMode="singleTop"
中缺少
编辑:
您还需要使用以下代码在 xml 目录中创建一个 searchable.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 清单中添加以下元数据
<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>
我有一个列表视图,它显示从 URL(JSON 数据)中获取的花的名称。我制作了一个 class "Flower" 类型的 ArrayList,其中保存了 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 配置为:
<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>
当我单击搜索视图图标并输入一些文本并从键盘按回车键时,它没有给我任何结果。 我还有一个疑问,在搜索视图中输入查询后,流程会去哪里?
您在清单的 activity 层 android:launchMode="singleTop"
中缺少
编辑:
您还需要使用以下代码在 xml 目录中创建一个 searchable.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 清单中添加以下元数据
<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>