来自服务器的java 安卓搜索建议
我需要在我的安卓应用程序中构建一个搜索功能,它依赖于来自服务器的json响应。用户将在actionbar中的searchview中输入搜索查询。根据用户类型,将向服务器进行查询,服务器返回的响应应显示为下拉建议。我该怎么做呢。根据我读过的文档,我需要实现一个内容提供者。实现应用程序搜索的最整洁的方式是什么
这是我的搜索活动。爪哇
package com.accure.health;
import 安卓.os.Bundle;
import 安卓.app.Activity;
import 安卓.app.SearchManager;
import 安卓.content.Context;
import 安卓.view.Menu;
import 安卓.view.MenuInflater;
import 安卓.widget.SearchView;
import 安卓.widget.TextView;
public class SearchActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
TextView tv = (TextView) findViewById(R.id.user_label);
tv.setText(" Welcome, " + getIntent().getExtras().getString("name"));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.search, menu);
//return true;
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.patient_search)
.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}
}
这是我的搜索结果。爪哇
package com.accure.health;
import 安卓.os.Bundle;
import 安卓.app.ActionBar;
import 安卓.app.Activity;
import 安卓.app.SearchManager;
import 安卓.content.Intent;
import 安卓.view.Menu;
import 安卓.widget.TextView;
public class SearchResultsActivity extends Activity {
TextView txtQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
ActionBar actionBar = getActionBar();
// Enabling Back navigation on Action Bar icon
actionBar.setDisplayHomeAsUpEnabled(true);
txtQuery = (TextView) findViewById(R.id.txt_Query);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
/**
* Handling intent data
*/
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
/**
* Use this query to display search results like
* 1. Getting the data from SQLite and showing in listview
* 2. Making webrequest and displaying the data
* For now we just display the query only
*/
txtQuery.setText("Search Query: " + query);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.search_results, menu);
return true;
}
}
# 1 楼答案
好的,简单明了:
实现用于从服务器请求数据的观察者模式
//将检索到的数据通知回请求客户端的接口
将从服务器获取数据的逻辑放在手边,比如当我给您输入XXX时,您的逻辑应该从服务器检索数据,一旦通过另一个工作线程从服务器检索到数据,使用
onSuccess
或onError
将其通知回客户机我们的基本系统已经准备好了,现在请阅读android here中的
AutoCompleteTextView
。它有一个与之关联的适配器,通过该适配器,建议将作为下拉列表显示给用户现在,当用户在文本框中键入某个内容时,您可以调用此逻辑,例如,如果用户键入XXX,则启动获取数据的逻辑,一旦通过
onSuccess
检索数据,您就准备一个适配器并将其设置为您的AutoCompeteView完整实现here