Я пытаюсь отобразить набор результатов выборки в виде списка. Всякий раз, когда я пытаюсь использовать фиктивные данные, он отображается правильно, но когда я меняю его на данные, полученные с сервера, ничего не происходит. Я не получаю ошибки, так что это очень запутаннымsetListAdapter не отображается
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import android.app.ListFragment;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class BlogFragment extends ListFragment {
String[] countries = new String[] {
"India",
"Pakistan",
"Sri Lanka",
"China",
"Bangladesh",
"Nepal",
"Afghanistan",
"North Korea",
"South Korea",
"Japan"
};
String [] titles ={};
ArrayAdapter<String> adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
/** Creating an array adapter to store the list of countries **/
new AsyncFetchData().execute();
adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1,titles);
return super.onCreateView(inflater, container, savedInstanceState);
}
private class AsyncFetchData extends AsyncTask
{
@Override
protected Object doInBackground(Object... arg0) {
JSONArray a = new JSONArray();
ArrayList<String> aList = new ArrayList<String>();
a = ServerAPI.getData();
for (int i = 0; i < a.length(); i++) {
String title = null;
String content = null;
try {
title = a.getJSONObject(i).getString("title");
content = a.getJSONObject(i).getString("content");
aList.add(title);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(title);
// System.out.println(content);
}
titles = aList.toArray(new String[aList.size()]);
/** Setting the list adapter for the ListFragment */
return null;
}
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
ArrayAdapter aa = new ArrayAdapter(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, titles);
aa.notifyDataSetChanged();
setListAdapter(aa);
}
}
}
Строка массива countries
отображается правильно в методе runOnUiThread
, а названия нет. Я проверяю данные, помещенные в массив строк заголовков, и он действителен. Любая идея, почему это происходит?
Пробовал ли вы 'adapter.notifyDatasetChanged()' перед вызовом setListAdapter'? –
@MysticMagic ничего не происходит. – omarsafwany
Затем вызовите listView.invalidateViews(); сразу после notifyDatasetChanged –