【发布时间】:2013-12-24 12:17:42
【问题描述】:
我有一个从服务器加载的列表。以下是执行此操作的任务:
class LoadActivities extends AsyncTask <String, String, String> {
protected String doInBackground(String ... args) {
final RestAdapter restAdapter = new RestAdapter.Builder().setServer("http://10.0.2.2:8080").build();
final MyService apiManager = restAdapter.create(MyService.class);
final Activity activity = apiManager.getActivity("some user", act_id);
//tasks in activity
for (Tasks t : activity.getTasks()) {
String r_id = t.getId()+"";
String name = t.getName();
HashMap<String, String> map = new HashMap<String, String>();
map.put("activity_id", act_id);
map.put("t_id", t_id);
map.put("t_name", name);
tasksList.add(map);
}
return null;
}
protected void onPostExecute(String file_url) {
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
TaskActivity.this, tasksList,
R.layout.list_item_rec, new String[] { "act_id", "t_id", "t_name"}, new int[] {
R.id.act_id, R.id.task_id,R.id.task_name });
setListAdapter(adapter);
}
});
}
}
所有这些都运行良好。但是,在另一个屏幕上,我在服务器上添加了一个项目,之后我回到这个屏幕再次显示列表。在回来的时候,我想刷新列表,以便它反映新添加的项目。
问题
我应该刷新整个列表吗?我已经尝试通过再次调用上面的类来做到这一点。像这样:
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getTitle().toString().equalsIgnoreCase("save")) {
new CreateTask(this,activityName.getText().toString(), actId).execute();
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
return true;
}
return true;
}
...回到这个屏幕
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Log.d("This is result", result);
new LoadActivities().execute();
}
}
}
问题在于它正在重新填充列表。这意味着我有每个活动的副本。我该如何解决这个问题?
或有没有办法让我不必重新加载整个列表,而只需将一个项目添加到现有列表中?
【问题讨论】:
-
在List中添加新值后尝试adapter().notifyDataSetChanged()
标签: android android-intent android-listview android-service