サーバーに配置されたデータベースから取得したデータを使用して ListView を作成しています。ListView には、行ごとに 2 つの TextView があり、1 つは都市用、もう 1 つは各都市がデータベースに持つ ID 用ですが、このテキストビュー (ID の 1 つ) は 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 を都市ごとにアルファベット順に並べ替えるにはどうすればよいですか?(php ファイルを変更せずに)
編集:フィルター可能を実装するカスタムベースアダプターを作成することで問題を解決しました。最初思ったほど難しくなかった(;_;)