我有一个活动,它只是列出Pair<String, String>
对象。我有一个自定义的TextWithSubTextAdapter
,它扩展了 ArrayAdapter:
public View getView(int position, View convertView, ViewGroup parent) {
View view; if (convertView == null) { LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = li.inflate(R.layout.text_sub, null); TextView tv = (TextView)view.findViewById(R.id.mainText); tv.setText(mCategories.get(position).first); TextView desc = (TextView)view.findViewById(R.id.subText); desc.setText(Html.fromHtml(mCategories.get(position).second)); } else { view = (View) convertView; } return view;
}
mCategories 是一个ArrayList<Pair<String, String>>
然后我调用lv.setAdapter(new TextSubTextAdapter(this, Common.physConstants));
只要我有一组有限的元素,它就很好用,因为我不需要滚动。但是,当我添加足够的元素时,滚动后,项目会交换它们的位置,如下所示:
我怀疑这种行为是由于我打电话造成的mCategories.get(position)
。因为视图永远不会保留在后台,Android 每次都会重新生成它们,所以我永远不会得到相同的项目,因为position
很少会有相同的值。
有没有办法获得一个恒定的 id,这可以让我获得具有固定位置的项目?我尝试使用 getItemID,但我不明白如何实现它。
注意:每个字符串都来自 strings.xml 文件。在启动时,它们永远不会被比较,并且被实例化一次。