我有一个来自URL的json feed
,其中包含20个字段,我会解析所有数据。但是,我需要在显示20个字段后从json feed
加载更多数据在listview中。
我创建了一个AsyncTask
并在listview中加载了json。这是我的班级
public void onCreate(Bundle savedInstanceState) {
new DoInBackgrd().execute();
}
private class DoInBackgrd extends AsyncTask<Void, Void, Void> implements
DialogInterface.OnCancelListener {
private ProgressDialog processDialog;
@Override
protected void onPreExecute() {
processDialog = ProgressDialog.show(List.this, "",
getString(R.string.loading), true);
processDialog.setCancelable(true);
}
public void onCancel(DialogInterface arg0) {
// TODO Auto-generated method stub
if (processDialog.isShowing()) {
processDialog.dismiss();
}
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
Jsonfunctions jParser = new Jsonfunctions();
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
results = json.getJSONArray(TAG_RESULTS);
// looping through All Contacts
for (int i = 0; i < results.length(); i++) {
JSONObject c = results.getJSONObject(i);
id = c.getString(TAG_ID);
name = c.getString(TAG_NAME);
adress = c.getString(TAG_ADRRESS);
latitude = c.getString(TAG_LATITUDE);
latitudeAry.add(c.getString(TAG_LATITUDE).toString());
longitude = c.getString(TAG_lONGITUDE);
latitudeAry.add(c.getString(TAG_lONGITUDE).toString());
distance = c.getString(TAG_DISTANCE);
image = c.getString(TAG_IMAGE);
phone = c.getString(TAG_TELEPHONE);
telphonenumberAry
.add(c.getString(TAG_TELEPHONE).toString());
NameAry.add(c.getString(TAG_NAME).toString());
resourceAry.add(new ResourceClass(point, id, name, adress,
distance, latitude, longitude, phone));
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
if (processDialog.isShowing()) {
processDialog.dismiss();
}
listView.setAdapter(new ASyncAdapter());
listView.setDividerHeight(2);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
Intent details = new Intent(List.this, Details.class);
details.putExtra("position", position + 1);
details.putExtra("name", resourceAry.get(position)
.getName());
details.putExtra("adress", resourceAry.get(position)
.getAdress());
details.putExtra("phone", resourceAry.get(position)
.getTelephone());
details.putExtra("latitudes", latitude);
details.putExtra("longitudes", longitude);
startActivity(details);
}
});
}
}
提前致谢
答案 0 :(得分:3)
我刚刚完成了类似的要求(issue faced on is specified in)
因此,我希望能为您提供适当的解决方案,为您节省时间。
如果我没有错,你需要在下一个20(即21 - 40)个字段中填入相同的ListView,以响应服务器api。
在这种情况下,你需要一次又一次地调用服务器api,因为你需要一个事件。假设您添加一个“下一步”按钮,然后在其单击中查看接下来的20个字段(21 - 40)。
目前,在“DoInBackgrd”的ur代码中,每次需要将新记录/字段绑定到ListView时,都会绑定/设置Adapter(ASyncAdapter)。这不是一个好习惯,它也不会在listView中刷新新分配的适配器的字段。
因此你应该:
考虑到'ASyncAdapter'是实现ArrayAdapter的自定义适配器,只需添加以下内容(从餐厅更改变量类型,根据您的要求)方法。
public void reSet(ArrayList<Resturant> resturantsCache) {
//This will clear your current fields/records in adpter
clear();
//This will new fields/records in adpter from provided resturantsCache ArrayList.
for (Resturant resturant : resturantsCache) {
add(resturant);
}
}
希望您能够在提供的方法中替换变量类型并根据您的要求使用它。如果您需要更多帮助,请提供ASyncAdapter代码。
感谢。