Android 动态更改ListView元素
我使用Listview在屏幕上的两个文本视图中显示来自光标的三列信息。左边的文本视图是静态的,而右边的文本视图有两种语言的翻译,选中时可以切换 我的问题是,在滚动ListView之前,这一切都很正常,此时适配器和ListView似乎变得不同步,导致行为不稳定,最后出现空指针异常 以下是onListItemClick代码:Android 动态更改ListView元素,android,Android,我使用Listview在屏幕上的两个文本视图中显示来自光标的三列信息。左边的文本视图是静态的,而右边的文本视图有两种语言的翻译,选中时可以切换 我的问题是,在滚动ListView之前,这一切都很正常,此时适配器和ListView似乎变得不同步,导致行为不稳定,最后出现空指针异常 以下是onListItemClick代码: public void onListItemClick(ListView l, View v, int position, long id){ //first rev
public void onListItemClick(ListView l, View v, int position, long id){
//first revert previous selection to English
if(previous_position!=99){
View vo =l.getChildAt(previous_position);
TextView pt = (TextView)vo.findViewById(R.id.english);
pt.setTextColor(Color.BLUE);
pt.setText(previous_text);
}
//now show current selection in Hindi
TextView t = (TextView) v.findViewById(R.id.translation);
t.setTextColor(Color.RED);
t.setText(gloCursor.getString(3));
//finally remember where we changed things so we can revert them
previous_position = position;
previous_text = gloCursor.getString(3);
// adapter data notification
//adapter.notifyDataSetChanged();
}
我已经把它注释掉了,因为它在这种情况下对我不起作用
如果您有任何见解或更好的设计,我们将不胜感激
谢谢,
P.
尝试将您的
getChildAt
代码替换为:
View vo = l.getChildAt(previous_position - l.getFirstVisiblePosition());
如果你把你的代码变成非迷你型的,这也会有帮助。当我滚动过第一个屏幕时,仍然会出现错误和错误突出显示。屏幕上显示的ListView和适配器中的模型之间的映射使我很难执行我想要的操作。如果您有错误,请发布它。另一种可能更可靠的方法是在适配器内部进行这些更改。感谢mango的帮助。我使用适配器获取视图,然后直接转到光标获取我要交换的值。相反,我可以在适配器中引入所有三个列,然后只拉入我想要的列。我会尝试一下,看看我从哪里得到的。我想到的范例是单选按钮。找到所选列表项并对其执行某些操作,同时将以前的选择恢复到其原始状态,这似乎很自然。我同意。这看起来确实是最自然的。但是将
getChildAt
与列表视图一起使用可能会非常麻烦,因为您只能访问可见的内容,而索引将改变以反映这一点。不幸的是,如果你以自己的方式尝试,你别无选择。根据我的经验,在适配器中简单地完成工作会更加有益。