我有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);
}
}
});
}
答案 0 :(得分:0)
每次调用onCreate
方法时都不要执行加载任务。您可以在活动中使用布尔标志,也可以使用onSaveInstanceState保存状态。
顺便说一句,在getListAdapter
中调用onPostExecute
并不是很好的方法,并且您的空检查会显示它。