9
私は、ユーザーからの入力を受け取り、サーバーに渡してJSON文字列を返し、その解析された内容をListViewに表示するアプリケーションを作成しています。設定後、onPostExecute方法でAndroidのadapter.notifyDataSetChanged()が機能していませんか?
//stripped down version
public class main extends ListActivity {
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
final EditText input = (EditText)findViewById(R.id.input);
input.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!input.getText().toString().equals("")) {
new GetDataTask().execute(input.getText().toString());
}
}
});
private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> {
protected ArrayList<String> doInBackground(String... query) {
URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere");
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
ArrayList<String> items = new ArrayList<String>();
//the code that parses the JSON goes here; it writes some strings to items
return items;
}
protected void onPostExecute(ArrayList<String> items) {
listItems = items;
adapter.notifyDataSetChanged();
}
}
}
(私の試みは、コードブロックに障害が発生したことを確認する場合、これは私の最初の投稿ですので、私は事前に謝罪)
:私は現在、AsyncTaskを拡張することによってこれを達成していますlistItemsはitemと同じですが、listItemsの内容を印刷すると、まさに私が欲しいものです。しかし、何らかの理由で、onPostExecuteから実行すると、adapter.notifyDataSetChanged()は何もしないように見えます(メインスレッドから呼び出されたときは正常に動作します)。
誰かが何が起こっているのか、どのように修正しているのか分かっていれば、本当に感謝しています。ありがとう!
おっと、何かをやっている願っています、私はその宣言を残しました。 アダプタ=新しいArrayAdapter(this、 \t \t android.R.layout.simple_list_item_1、listItems); –
あなたは** clear()**と** addAll()** – Samuel
を試しましたか?どうもありがとうございました!好奇心のために、なぜclear - > addAll - > notifyDSCが動作するのか知っていますか? –