我的活动是由一个ArrayList<HashMap<String,String>> THREADS;
Android的上下文菜单的info.position与方向改变而改变
填充的ListActivity我也定义在我活动的getView填充的ArrayList<ArrayList<HashMap<String,String>>> PAGES;
。
对于每个THREADS项目,我相应的数据添加到PAGES
public View getView(int position, View convertView, ViewGroup parent){
...
String lp = THREADS.get(position).get("lastPage");
String base = THREADS.get(position).get("base").replaceAll("^.*(?:td\\-p\\/)", "").replaceAll("/jump-to/first-unread-message", "?page_size=25&page=PAGE_NUMBER_HERE");
int p = Integer.parseInt(lp);
ArrayList<HashMap<String, String>> lnks = new ArrayList<HashMap<String, String>>();
for(int u=0;u<p;u++){
HashMap<String,String> temp = new HashMap<String,String>();
temp.put("page", Integer.toString(u+1));
temp.put("base", base);
temp.put("title", THREADS.get(position).get("title"));
lnks.add(temp);
PAGES.add(position, lnks);
}
...
}
这PAGES的ArrayList通过上下文菜单访问
case R.id.goPage:
final Dialog dlg = new Dialog(ThreadListing.this);
dlg.setContentView(R.layout.link_selector);
ListView sel = (ListView) dlg.findViewById(R.id.linksel);
adaptr = new SimpleAdapter(this, PAGES.get(info.position), R.layout.link_sel_row, new String[]{"page"}, new int[]{R.id.link_title});
pgs = PAGES.get(info.position);
sel.setAdapter(adaptr);
dlg.setTitle(PAGES.get(info.position).get(0).get("title"));
dlg.show();
sel.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Intent i = new Intent(getApplicationContext(), ThreadViewer.class);
String pg = pgs.get(position).get("base").replaceAll("PAGE_NUMBER_HERE", pgs.get(position).get("page"));
i.setData(Uri.parse(pg));
startActivity(i);
dlg.dismiss();
}
});
return true;
该上下文菜单还访问螺纹ArrayList的
在活动的第一次加载时,所有内容都正确匹配。该对话框显示正确的标题,并且该适配器包含正确的数据。
但是,当我要么开始一个新的活动,然后通过后退按钮返回,或更改方向,对话框被抛出的顺序。它开始显示列表项的标题和适配器,比我选择的列表项更早,就好像info.position引用了不同的位置,但访问线程的上下文菜单项保持正确的顺序。所以THREADS.get(info.position)和PAGES.get(info.position)不再以某种方式同步。再次改变方向有时会重新同步它,但我不明白这是怎么发生的。
我正在解析一个html文档,每行数据都有一个数组。我正在使用PAGES来保存这些内容。我在getview中这样做,所以我可以迭代附加到每一行的数组。如果这是导致差异的原因,那么我可以尝试将迭代移到其他地方。 – aperture