我创建了一个包含三个textview和一个复选框的listview,并将其放入BaseAdapter。它必须做的是,如果某个商品处于“未读”状态,则将其文字视图设为 BOLD 。但是,我遇到了两个问题。
我研究了它,但找不到任何有用的东西。如果有人有想法,你能帮帮我吗?下面是getView()。
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder viewHolder;
if(convertView == null){ // check if convertView exists
// get and inflate layout
view = layoutInflater.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.tv1 = (TextView)view.findViewById(R.id.list_callerIDname);
viewHolder.tv2 = (TextView)view.findViewById(R.id.list_callerIDnumber);
viewHolder.tv3 = (TextView)view.findViewById(R.id.list_messageSentTime);
viewHolder.cb = (CheckBox)view.findViewById(R.id.checkBox1);
// get each CheckBox into cb_array for future use
this.cb_array[position] = (CheckBox)view.findViewById(R.id.checkBox1);
// use it as a tag
view.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder)view.getTag();
}
viewHolder.tv1.setText(this.callerIDnames[position]);
viewHolder.tv2.setText(this.callerIDnumbers[position]);
viewHolder.tv3.setText(this.messageSentTimes[position]);
// if message is unread, then make texts bold
if (messageRead_list[position] == false){
viewHolder.tv1.setTypeface(viewHolder.tv1.getTypeface(), Typeface.BOLD);
viewHolder.tv2.setTypeface(viewHolder.tv2.getTypeface(), Typeface.BOLD);
viewHolder.tv3.setTypeface(viewHolder.tv3.getTypeface(), Typeface.BOLD);
}
return view;
}
答案 0 :(得分:1)
当ListView重用视图时,它可能在滚动之前是粗体,现在应该是明文。在阅读邮件时,尝试将字体显式设置为PLAIN。
答案 1 :(得分:0)
您应该通过实现getItemViewType(int position)
来使用两种类型的视图计数 像这样:public int getViewTypeCount () {
return 2;
}
和此:
public int getItemViewType (int position) {
if (messageRead_list[position] == false) return 0;
return 1;
}
然后在创建项目时检查项目类型以设置正确的字体。
这是黑客攻击,我将其设置为正常或默认为on,因为您的评论应该是解决方案。你确定messageRead_list是正确的吗?
答案 2 :(得分:0)
您必须在null
中传递setTypeFace()
,而不是使用getTypeFace()
。
当getTypeFace()
未返回null
时,样式将无法正确设置。
// if message is unread, then make texts bold
if (messageRead_list[position] == false){
viewHolder.tv1.setTypeface(null, Typeface.BOLD);
viewHolder.tv2.setTypeface(null, Typeface.BOLD);
viewHolder.tv3.setTypeface(null, Typeface.BOLD);
} else {
viewHolder.tv1.setTypeface(null, Typeface.NORMAL);
viewHolder.tv2.setTypeface(null, Typeface.NORMAL);
viewHolder.tv3.setTypeface(null, Typeface.NORMAL);
}
或者你可以直接使用这个,这是你通过null
时所做的。
setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
和
setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));