Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态更改ListView元素_Android - Fatal编程技术网

Android 动态更改ListView元素

Android 动态更改ListView元素,android,Android,我使用Listview在屏幕上的两个文本视图中显示来自光标的三列信息。左边的文本视图是静态的,而右边的文本视图有两种语言的翻译,选中时可以切换 我的问题是,在滚动ListView之前,这一切都很正常,此时适配器和ListView似乎变得不同步,导致行为不稳定,最后出现空指针异常 以下是onListItemClick代码: public void onListItemClick(ListView l, View v, int position, long id){ //first rev

我使用Listview在屏幕上的两个文本视图中显示来自光标的三列信息。左边的文本视图是静态的,而右边的文本视图有两种语言的翻译,选中时可以切换

我的问题是,在滚动ListView之前,这一切都很正常,此时适配器和ListView似乎变得不同步,导致行为不稳定,最后出现空指针异常

以下是onListItemClick代码:

 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
与列表视图一起使用可能会非常麻烦,因为您只能访问可见的内容,而索引将改变以反映这一点。不幸的是,如果你以自己的方式尝试,你别无选择。根据我的经验,在适配器中简单地完成工作会更加有益。