繁体   English   中英

如何在onActivityResult上重新加载SimpleAdapter

[英]How to reload SimpleAdapter on onActivityResult

我正在努力实现以下目标:

  1. 屏幕1显示了来自服务器的列表数据
  2. 用户按下右上角的“ +”按钮添加新项
  3. 屏幕2显示带有文本字段
  4. 用户输入数据并单击保存
  5. 现在,我想回到屏幕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() 这似乎不起作用。

我的过程错了吗? 有一个更好的方法吗? 我感到难过...

您必须在UpdateItems onPostExecute()重新加载数据AsynchTask因为要在AsynchTask中加载数据, AsynchTask它会在另一个线程中加载数据并更新ListView但此时列表尚未加载.. AsynchTask像这样更改您的AsynchTask

class UpdateItems extends AsyncTask<String, String, String> {
    protected String doInBackground(String... args) {
        loadList();
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        adapter.notifyDataSetChanged();
    }
}

并在onActivityResult()删除此行adapter.notifyDataSetChanged() onActivityResult()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM