我一直在谷歌搜索相当多的工作,以某种方式它不适合我。我正在做的是运行片段,当我打开它时,我希望将它从mySQL数据库中调用的数据填充到listview中。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.narutohd.ServiceHandler.ServiceHandler;
import android.app.ListFragment;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class FindPeopleFragment extends ListFragment {
private ProgressDialog pDialog;
// URL to get contacts JSON
private static String url = "REMOVED";
// JSON Node names
private static final String TAG_CONTACTS = "products";
private static final String TAG_ID = "pid";
private static final String TAG_NAME = "link";
// contacts JSONArray
JSONArray contacts = null;
private List<HashMap<String, String>> contactList;
private SimpleAdapter adapter;
public FindPeopleFragment(){}
public void onActivityCreated(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
contactList = new ArrayList<HashMap<String, String>>();
adapter = new SimpleAdapter(getActivity(), contactList,
R.layout.list_item, new String[] { TAG_ID, TAG_NAME },
new int[] { R.id.pid, R.id.episode });
ListView lv = getListView();
lv.setAdapter(adapter);
new GetContacts().execute();
super.onActivityCreated(savedInstanceState);
}
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... arg0) {
//Code
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
//Code
}
}
}
这是我目前的代码,但它在加载时所做的一切都没有,没有任何错误。我相信它应该没问题,因为它适用于某项活动。我认为没有任何理由。我想到的一个替代方法是将onPostExecute数据传递给一个公共变量,然后使用setListAdapter实时(onActivityCreated)填充它,因为我知道它现在可能不起作用的原因是因为listview已经在oNActivity中充气了推出。
非常感谢您的帮助!
很抱歉,因为我不熟悉Java / Android,想知道我做错了,还是另一种方法可以从mainActivity运行Async Task,然后在片段上填充listview呢?
我运行下面的代码使用adapter.notifyDataSetChanged,但它不起作用。 GetContacts仍未执行。
我很确定问题在于GetContacts DoinBackground没有被执行。或者它似乎没有,因为我甚至没有看到我的URL出现(哪个应该,我根本没有看到pDialog启动)。
答案 0 :(得分:0)
我认为你应该调用“adapter.notifyDataSetChanged();”
此方法可以动态修改ListView数据。
private List<HashMap<String, String>> contactList;
private SimpleAdapter adapter;
public void onActivityCreated(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
contactList = new ArrayList<HashMap<String, String>>();
adapter = new SimpleAdapter(getActivity(), contactList,
R.layout.list_item, new String[] { TAG_ID, TAG_NAME },
new int[] { R.id.pid, R.id.episode });
ListView lv = getListView();
lv.setAdapter(adapter);
new GetContacts().execute();
super.onActivityCreated(savedInstanceState);
}
public class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... arg0) {
//Your code...
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
adapter.notifyDataSetChanged();
}
}
答案 1 :(得分:0)
我不知道这是所有的代码,但我想你应该添加一个onCreateView。并使用listview
的布局答案 2 :(得分:0)
自己解决,使用onResume更新。