0

我有一个显示ListView. 我使用 anAsyncTask从服务器获取数据并将它们填充到列表中。

当我点击操作栏时,一个新的活动开始(样式像一个对话框) - 用户添加一些数据点击“发送”并将它们发送到服务器。然后这个 Dialog-Activity 关闭,当我想刷新列表并添加新数据时,我返回到上一个。

试图在该onResume()方法上运行 AsyncTask,但是当我得到新数据和以前的数据时,我得到了它们两次,因为 AsyncTask 也在 onCreate() 上运行。

1)即使是第一次活动,onStart, onCreate and onResume所以我有两次显示列表数据。我应该使用标志之类的东西,以便 Activity 第一次启动时不应该运行该代码吗?

2)我想不出有什么办法notifyDataSetChanged可以帮助我,因为我从服务器填充数据。我有一个自定义适配器扩展ArrayAdapter.

代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);


    JSONSpotTask task = new JSONSpotTask();     //task
    task.execute();
    try {
        task.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    list1 = (ListView) findViewById(R.id.listview1);
    ta = new TipsAdapter(this, R.layout.row_list_item, results);
    list1.setAdapter(ta);


}   



@Override
protected void onResume() {                     
    super.onResume();                               

    JSONSpotTask task = new JSONSpotTask();     //task
    task.execute();
    try {
        task.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    list1 = (ListView) findViewById(R.id.listview1);
    ta = new TipsAdapter(this, R.layout.row_list_item, results);
    list1.setAdapter(ta);
}

谢谢

4

2 回答 2

2

鉴于创建循环将始终在onResume之后进行onCreate,您应该只在onResume(). 然后它只会在初始运行时执行一次,并且在 Activity 进入前台时也会执行。

如果您知道即使在前台也不会总是需要重做,我会使用onCreate在“对话框”中设置的标志Activity。但是您会发现始终在每个onResume.

于 2013-09-06T10:13:21.887 回答
0

仅当您更新了结果数组时,才应使用 notifdatasetchanges。否则,您应该在 onPostExecute 回调中创建带有结果数组的新适配器并将其绑定到 listview

于 2013-09-06T10:16:33.357 回答