在主题中,当我在已经更改的单元格中使用adapter.notifyDataSetChanged()
文本颜色时,会恢复默认值。我不知道为什么它会发生在我这里改变颜色的方法:
for(int l=0;l<list.size();l++){
System.out. println("kolorujemy! "+ list.size() );
LinearLayout root = (LinearLayout) getViewByPosition(l,listView);
((TextView) root.findViewById(R.id.wartosc_calosci)).setTextColor(Color.YELLOW);
我还要补充一点,这部分代码在其他线程中循环,因为单元格的vaules每30秒更新一次。这是方法getViewByPosition:
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount();
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition+1;
return listView.getChildAt(childIndex);
}
}
getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListViewHolder listViewHolder;
if(convertView == null){
listViewHolder = new ListViewHolder();
convertView = activity.getLayoutInflater().inflate(R.layout.lista_wlasnych_spolek, null);
listViewHolder.txtFirst = (TextView) convertView.findViewById(R.id.nazwa_spolki);
listViewHolder.txtSecond = (TextView) convertView.findViewById(R.id.wartosc_akt);
listViewHolder.txtThird = (TextView) convertView.findViewById(R.id.wartosc_kupna);
listViewHolder.txtFourth = (TextView) convertView.findViewById(R.id.wartosc_calosci);
convertView.setTag(listViewHolder);
} else {
listViewHolder = (ListViewHolder) convertView.getTag();
}
答案 0 :(得分:1)
首先这一行
return listView.getAdapter().getView(pos, null, listView);
没有意义,因为通过手动调用,您将在内部始终为列表视图创建和扩充新行,但此视图从未在ListView
中使用。请注意,您始终传递第二个参数convertView
null,因此内部此方法将创建新视图,但此视图将永远不会在ListView
中使用。
提示1.请勿亲自致电getView()
方法
正如您可能知道ListView
在内存中存储的行/视图数量与在正确使用ViewHolder
模式时在屏幕上可见的行/视图一样。
所以现在你要为可见的每一行设置颜色,甚至是ListView
中真正不存在的那些不可见的颜色。
提示2。
对任何行进行着色或更改任何内容的最佳方法是在getView()
方法实现中执行,具体取决于您的适配器项状态。不要从外面做,因为它看起来像某种黑客或错误的架构。