Android 如何在具有搜索功能的页面中加载listview
我正在尝试实现一个listview,它第一次只显示10个项目。当用户点击“显示更多”按钮时,应加载20个项目。我做了这个,但是我只能在当前加载的列表中搜索。清单上有100项。所以当我第一次尝试搜索时,我只能搜索这10个项目Android 如何在具有搜索功能的页面中加载listview,android,listview,search,Android,Listview,Search,我正在尝试实现一个listview,它第一次只显示10个项目。当用户点击“显示更多”按钮时,应加载20个项目。我做了这个,但是我只能在当前加载的列表中搜索。清单上有100项。所以当我第一次尝试搜索时,我只能搜索这10个项目 private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter>{ @Override protected SimpleAdapter
private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter>{
@Override
protected SimpleAdapter doInBackground(String... strJson) {
connector=new OpenerpRpc(getBaseContext());
connector.Config();
current_page += 1;
try{
Object login = connector.Login();
Object tests2 = connector.searchWorkers("res.partner",new Object[0]);
Object[] ret_workers=(Object[])tests2;
Object[] params_var = {"name","parent_id","partner_longitude","partner_latitude","street","zip","city","country_id"};
Object test = connector.Read("res.partner",ret_workers,params_var);
Object[] ret=(Object[])test;
int length = current_page*10;
listOfFieldValues = new ArrayList<HashMap<String, Object>>(length); //ret.length
int totalCount = 0;
for (Object objectFields : ret) {
listOfFieldValues.add((HashMap<String, Object>)objectFields);
}
}catch(Exception e){
Log.d("Exception", e.toString());
}
//String[] from = { "name","street"};
String[] from = { "name"};
// Ids of views in listview_layout
int[] to = { R.id.tv_address};
SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listOfFieldValues, R.layout.lv_gps_layout, from, to);
return adapter;
}
/** Invoked by the Android on "doInBackground" is executed */
@Override
protected void onPostExecute(final SimpleAdapter adapter) {
// Setting adapter for the listview
mListView.setAdapter(adapter);
//for(int i=0;i<adapter.getCount();i++){
for(int i=0;i<adapter.getCount();i++){
HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);
name = (String) hm.get("name");
HashMap<String, Object> hmDownload = new HashMap<String, Object>();
hm.put("name",name);
adapter.notifyDataSetChanged();
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Intent myIntent = new Intent(MainActivity.this, YardActivity.class);
myIntent.putExtra("key", position); //Optional parameters
MainActivity.this.startActivity(myIntent);
}
});
}
inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
progress.dismiss();
Log.d("/****","Data from odoo is finished");
}
}
私有类ListViewLoaderTask扩展异步任务{
@凌驾
受保护的SimpleAdapter doInBackground(字符串…strJson){
connector=new openerppc(getBaseContext());
connector.Config();
当前页面+=1;
试一试{
Object login=connector.login();
objecttests2=connector.searchWorkers(“res.partner”,新对象[0]);
对象[]ret_workers=(对象[])tests2;
Object[]params_var={“name”、“parent_id”、“partner_经度”、“partner_纬度”、“street”、“zip”、“city”、“country_id”};
对象测试=connector.Read(“res.partner”,ret_workers,params_var);
对象[]ret=(对象[])测试;
int length=当前页面*10;
listOfFieldValues=new ArrayList(长度);//ret.length
int totalCount=0;
for(对象对象字段:ret){
添加((HashMap)对象字段);
}
}捕获(例外e){
Log.d(“异常”,例如toString());
}
//字符串[]from={“name”,“street”};
字符串[]from={“name”};
//listview\u布局中的视图ID
int[]to={R.id.tv_address};
SimpleAdapter=new SimpleAdapter(getBaseContext(),listOfFieldValues,R.layout.lv\u gps\u layout,from,to);
返回适配器;
}
/**由Android在“doInBackground”上调用*/
@凌驾
受保护的void onPostExecute(最终SimpleAdapter适配器){
//设置listview的适配器
mListView.setAdapter(适配器);
//对于(inti=0;i我认为,更好的搜索方法是使用php
发送关键字(从应用程序发送到主机),然后以json的形式回复结果。我看不出你为什么不能搜索所有100个项目。你应该只使用正确的列表。