我正在使用从放置在服务器中的数据库中获取的数据制作 ListView。ListView 的每一行有两个 TextView,一个用于城市,另一个用于每个城市在数据库中的 ID,但是这个 textview(ID 的那个)在 ListView 中是隐藏的,所以用户只能看到城市。
一切正常,但现在我想在列表视图中添加一个搜索栏,以便过滤城市,但我遇到了以下问题:
1.-ListView的适配器是一个简单的适配器,你可以在代码上看到,我没有找到如何使用这样的适配器过滤Listview的例子。
2.-我通过异步任务获取 ListView 的信息,并在异步任务的onPostExecute方法中设置 ListView,同样,我没有找到在这样的地方过滤它的示例。
这是“相关”代码。如果有人需要完整的代码,请向我索取。
public class SQLWebVer extends ListActivity implements OnItemClickListener{
ProgressDialog barraProgreso;
ArrayList<HashMap<String, String>> listaCiudades;
.
.//some more varibles for the class
.
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sqlwebver);
// Hashmap de la ListView
listaCiudades = new ArrayList<HashMap<String, String>>();
new cargaCiudades().execute();//this is the call to the async task
}
class cargaCiudades extends AsyncTask<String, String, String>{//the async task
.
.//here are the onPreExecute and doInBackground methods
.
protected void onPostExecute(String file_url) {
barraProgreso.dismiss();//quita la barra de la pantalla
runOnUiThread(new Runnable(){//actualiza la UI(la listView)
public void run() {
// TODO Auto-generated method stub
ListAdapter adapter = new SimpleAdapter
(SQLWebVer.this, listaCiudades,
R.layout.sqlweblist_item,
new String[]{"key_id", "key_ciudad"},new int[]
{R.id.ID_CIUDAD, R.id.CIUDAD});
setListAdapter(adapter);
}
});
}
}
我试图在 onCreate 和 onPostExecute 方法上添加过滤器功能,但是没有运气,有什么建议吗?
PD:BONUS 问题,我如何按城市的字母顺序对我的 ListView 进行排序,但保持每个 ID 与他的城市相关?(不更改 php 文件)
编辑:我通过创建一个实现可过滤的自定义基本适配器解决了这个问题。没有我一开始想的那么难;)