【发布时间】:2013-12-07 05:53:19
【问题描述】:
我正在努力实现以下目标:
- 屏幕 1 显示来自服务器的列表数据
- 用户按下右上角的“+”按钮添加新项目
- 屏幕 2 显示带有文本字段
- 用户输入数据并点击保存
- 现在我想回到屏幕 1 并从服务器刷新列表,以便显示新添加的项目
我在实现上述第 5 点时遇到问题。这是我目前所拥有的:
我有一个AyncTask,如下所示:
public class MyActivity extends SherlockListActivity {
ArrayList<HashMap<String, String>> taskList;
//this grabs data from server and loads it in ArrayList
protected void loadList() {
taskList = new ArrayList<HashMap<String, String>>();
final RestAdapter restAdapter = new RestAdapter.Builder().setServer("http://10.0.2.2:8080").build();
final TaskService apiManager = restAdapter.create(TaskService.class);
final Task task = apiManager.getTask("someuser", task_id);
for (Item item : task.getItems()) {
String t_id = t.getId()+"";
String name = t.getName();
HashMap<String, String> map = new HashMap<String, String>();
map.put("act_id", act_id);
map.put("t_id", t_id);
map.put("t_name", name);
taskList.add(map);
}
}
public void onCreate (Bundle b) {
new LoadItems().execute();
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getTitle().equals("Create")) {
Intent create = new Intent(getApplicationContext(), CreateTask.class);
startActivityForResult(create, 1);
return true;
}
return true;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
//item got added now load again from server
if (resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
new UpdateItems.execute();
adapter.notifyDataSetChanged();
}
}
}
class UpdateItems extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
loadList();
return null;
}
}
class LoadItems extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
loadList();
}
protected void onPostExecute(String file_url) {
adapter = new SimpleAdapter(
MyActivity.class, taskList,
R.layout.list_item_rec, new String[] { "act_id", "t_id", "t_name"}, new int[] {
R.id.act_id, R.id.t_id,R.id.t_name });
setListAdapter(adapter);
}
}
问题
如何从onActivityResult 中的服务器重新加载数据。基于上述,我正在做的是创建另一个 AynchTask 仅用于再次加载数据然后调用notifyDataSetChanged()。这似乎不起作用。
我的流程错了吗?有一个更好的方法吗?我被难住了……
【问题讨论】:
标签: android android-intent android-listview