我有一个工作的搜索功能,插入搜索结果到微调,但我希望它是没有需要按搜索按钮就像谷歌。 事情是这样的:我怎样才能在我的Android应用程序查询我的MYSQL数据库,而无需按搜索
回答
嗯,首先,你需要使用一个AutoCompleteTextView,即每次触发一个过滤器,文本更改,并根据您附加的图像精确显示建议。
然后,你必须是你的自定义适配器,并把它添加到您的视图在你的活动你的onCreate功能:从
protected void onCreate(Bundle savedInstanceState) {
...
AutomaticSearchAdapter adapter = new AutomaticSearchAdapter(this, new ArrayList<CustomObject>(), "");
listView = (AutoCompleteTextView) findViewById(R.id.search_complete);
listView.setThreshold(1);
listView.setAdapter(adapter);
...
}
下面是如何构建自定义适配器的模板,该载荷数据任何API和根据您自己的过滤标准建议
public class AutomaticSearchAdapter extends ArrayAdapter implements AsyncResponse, Filterable {
private ArrayList<ContactItem> realList; // The list that will be shown
private ArrayList<CustomObject> results = new ArrayList<CustomObject>(); // A list with all data from your API
private Filter mFilter = new Filter(){
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint != null) {
String constraintTrim = ContactSearchAdapter.toPlain(constraint.toString()).trim().toLowerCase();
// When te user introduces at least 3 characteres, get data from your API
if (constraintTrim.length() == 3) {
// Call Here to you API, and populate results
}
ArrayList<CustomObject> suggestions = new ArrayList<CustomObject>();
for (CustomObject object : results) {
if(/*some condition on your downloaded datum */) {
suggestions.add(object);
}
}
filterResults.values = suggestions;
filterResults.count = suggestions.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint, FilterResults results) {
if(results == null){
return;
}
try {
realList.clear();
if (results.values != null){
realList.addAll((List<CustomObject>) results.values);
}
notifyDataSetChanged();
}catch (Exception e) {
}
}
};
public int getCount() {
return realList.size();
}
@Override
public Object getItem(int position) {
try {
if (realList.size() > 0) {
return realList.get(position);
}else {
return null;
}
}catch (Exception ex) {
return null;
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// HERE MUST BE YOUR CUSTOM getView FROM YOUR LIST
// YOU CAN LEARN MORE ABOUT http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67
return convertView;
}
@Override
public void postStart() {
//Nothing to do.
}
@Override
public Filter getFilter() {
return mFilter;
}
}
当然,您将需要重构上面的代码以满足自己的需求。
我会做一个函数,抓取我的搜索结果,并将它们放在一个隐藏的ArrayList中,然后我将使用上面的代码使它从已经解析的数据中搜索来获得我想要的结果。但是,如果数据库规模很大,这不会是不好的做法。 – Elias
总是要向API发出获取请求,您必须设置LIMIT,但它会干扰结果,因为查询不在隐藏的ArrayList上。因此,在这种情况下最好的做法是向API发出请求,直到结果大于LIMIT,并且结果小于LIMIT时,可以停止执行Web请求,并且只对您隐藏的ArrayList进行过滤 –
我bevieve你需要的是一个onTextChanged监听到这里看看https://developer.android.com/reference/android/text/TextWatcher.html
- 1. Android:我怎样才能让我的应用程序多语言?
- 2. 我怎样才能使用多表,而我的数据在PHP?
- 3. 我怎样才能让我的Android应用程序时尚的按钮
- 4. 我怎样才能在MySQL
- 5. 我怎样才能在MYSQL
- 6. 我怎样才能在MySQL
- 7. Android-我怎样才能在SQL应用程序中附加SQLite数据库
- 8. 我怎样才能得到我的数据库的内容,而不是索引
- 9. 我怎样才能从MySQL查询与PHP的索引值?
- 10. 我怎样才能在我的应用程序散列密码
- 11. 我怎样才能总是让我的应用程序响应
- 12. 我怎样才能在android
- 13. 我怎样才能改变搜索条
- 14. Symfony的1.4 - 我怎样才能查询
- 15. 我怎样才能改变我的应用程序的语言
- 16. 我怎样才能使用我的流星应用程序?
- 17. 我怎样才能从数据库
- 18. 我怎样才能在Android上调用Facebook应用程序?
- 19. MySql,我怎样才能从我的开发数据库导出索引到我的生产数据库?
- 20. 我怎样才能使全部我的VB 6.0应用程序
- 21. 我怎样才能重新启动我的iPhone应用程序
- 22. 我怎样才能让我的数据库连接UTF8启用
- 23. 我怎样才能无需提交
- 24. 我怎样才能从我的应用程序从Android远程URL打开PDF
- 25. 我怎样才能在mysql查询中的行之间
- 26. 我怎样才能在Java程序
- 27. 我怎样才能得到我的android应用程序的内部版本号?
- 28. 我怎样才能把我的Android应用程序的快照/布局
- 29. 我怎样才能打开我的Android应用程序的多个实例
- 30. 我怎样才能从我的web应用程序进行android API调用?
沿着这些线? https://developer.android.com/guide/topics/search/adding-custom-suggestions.html –