我正在尝试创建一些条目的列表,从而在 php 服务器上产生查询。我正在使用一个片段,它调用一个AsyncTask
名为DescarregarLlistatEntrades
. 这个类,基本上是从 php 执行中解析 json 数据,然后我想填充一个 List,但是由于DescarregarLlistatEntrades
不是扩展ListActivity
,我不能使用方法setListAdapter
。
这是代码:
片段:
public class MyFragmentB extends Fragment {
private ArrayList<HashMap<String, String>> llistatEntrades;
Context cont=getActivity(); //Recupero el contexte per poder pasar-lo.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.llistat_fotos, container, false);
//hashmap per al llistat de les entrades que hi han al servidor
llistatEntrades=new ArrayList<HashMap<String, String>>();
//descarrego totes les imatges en segon plà i omplo el view
new DescarregarLlistatEntrades(cont, myFragmentView, llistatEntrades).execute();
//Recupero el el layout de la view per poder fer coses am ella a posteriori.
ListView lv = (ListView)myFragmentView.findViewById(android.R.id.list);
return myFragmentView;
}
DescarregarLlistatEntrades:
public class DescarregarLlistatEntrades extends AsyncTask<String, String, String>{
private Context mContext;
private View rootView;
private ArrayList<HashMap<String, String>> llistatEntrades;
private String linkFoto, dataUpload, usuariUpload, comentariUpload;
private ProgressDialog pDialog;
private List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONParser jsonParser = new JSONParser();
private String url_get_entrades = "http://192.168.1.33/testing/recuperaentrades.php"; //passantli per get el id de la setmana
public DescarregarLlistatEntrades(Context context, View rootView, ArrayList<HashMap<String, String>> llistatEntrades){
this.mContext=context;
this.rootView=rootView;
this.llistatEntrades=llistatEntrades;
}
@Override
protected void onPreExecute() {
[...]
}
@Override
protected String doInBackground(String... arg0) {
params.add(new BasicNameValuePair("setmana", "1"));
JSONObject json = jsonParser.makeHttpRequest(url_get_entrades, "GET", params);
JSONArray entradesObj;
try {
int success = json.getInt("success");
//mirem si hi ha success
if (success==1){
entradesObj = json.getJSONArray("entrades"); //recupero totes les entrades
for (int i=0; i<entradesObj.length();i++){
JSONObject entrada = entradesObj.getJSONObject(i); //recupero cada objecte
//guardo cada camp de cada entrada a variables:
this.usuariUpload=entrada.getString("usuariUploader");
this.linkFoto=entrada.getString("urlFoto");
this.comentariUpload=entrada.getString("comentariUsuari");
this.dataUpload=entrada.getString("dataUpload");
//creo el hashmap dels valors anteriors
HashMap<String, String> map = new HashMap<String, String>();
map.put("usuariUpload", this.usuariUpload);
map.put("linkFoto", this.linkFoto);
map.put("comentariUpload", this.comentariUpload);
map.put("dataUpload", this.dataUpload);
this.llistatEntrades.add(map);
}
} else {
Log.d("debugging","No hi han entrades..");
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
this.pDialog.dismiss(); //amago el dialog
// updating UI
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
this.mContext, this.llistatEntrades,
R.layout.entrada_llista, new String[] { "usuariUpload",
"linkFoto","comentariUpload", "dataUpload"},
new int[] { R.id.userNameUploader, R.id.titolFoto, R.id.comment, R.id.hora });
// updating listview
setListAdapter(adapter); //THIS LINE!!
}
“DescarregarLlistatEntrades 类型的方法 setListAdapter(ListAdapter) 未定义”
使用片段时我应该使用其他方法吗?
请注意,我传递给 AsyncTask 类、Context 和 Inflater。也许我必须通过别的东西?
谢谢你。