如何在活动之间导航时在listView中保存数据并滚动位置

时间:2014-01-15 23:07:46

标签: android android-listview android-activity savestate

我有Activity扩展ListActivity,在onCreate方法中设置contentView并调用AsyncTask加载数据并获取列表填写我想要的,问题是当我检查详细活动并想要返回listView时:我执行onCreate方法,再次加载数据和listView滚动到顶部失去我以前的位置。 我想要实现的是谷歌gmail应用程序,例如:列表视图加载一次,滚动位置保存。

我在这里看了很多,我尝试了很多解决方案,但没有一个正在运作。

实现此方案的最佳方法是什么?

我的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    new LoadEvents().execute();
}

我的asyncTask:

class LoadEvents extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Home.this);
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }
    protected String doInBackground(String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest(AgendaIConstantes.URL_EVENTS, "GET", params);

                ......Processing 

                    eventList.add(map);
                }
            } else {
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }
    protected void onPostExecute(String file_url) {
        pDialog.dismiss();
        runOnUiThread(new Runnable() {
            public void run() {
                ListAdapter adapterRes = getListAdapter();
                if(adapterRes == null){
                    ListAdapter adapter = new SimpleAdapter(Home.this, eventList,R.layout.list_item, 
                            new String[] { .....},
                            new int[] { .....});
                    setListAdapter(adapter);
                }
            }
        });

    }

1 个答案:

答案 0 :(得分:0)

每次调用onCreate方法时都不要执行加载任务。您可以在活动中使用布尔标志,也可以使用onSaveInstanceState保存状态。

顺便说一句,在getListAdapter中调用onPostExecute并不是很好的方法,并且您的空检查会显示它。

相关问题