1
我遇到问题。我的ListView控件中包含有2组划分项目:在listView自定义适配器中获取父视图支持者
if (datas.get(position).getStatus().equalsIgnoreCase("after")) {
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
} else {
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.white));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.white));
}
它看起来像:
“白”字段的金额每次不同,由于当前时间。
而且问题是我需要增加textSize
,使Bold
的LAST白场(见显着的领域)。
如何从自定义适配器执行此操作?
我试了一下:
private int state = 0;
....
if (datas.get(position).getStatus().equalsIgnoreCase("after")) {
if (state == 0) {
//Make parent placeholder Bold here
parentHolder = (ViewHolder) parent.getTag();
parentHolder.postNameView.setTypeface(null, Typeface.BOLD);
parentHolder.postTimeView.setTypeface(null, Typeface.BOLD);
parentHolder.postNameView.setTextSize(24);
parentHolder.postTimeView.setTextSize(24);
state++;
}
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
} else {
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.white));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.white));
}
所以国家将仅有一次是0。但parentHolder = (ViewHolder) parent.getTag();
不起作用。它是null
另外我试图找到this post的用法。
编辑: 的白和污白色项目的量不同,每次适配器,因为在服务器.getStatus()
的变化,由于当前时间创建。它可以是“之前”(如果开始时间为<当前时间)和“之后”(当前时间<开始时间)。
而且我需要马克正是那个项目,这是一种“现在”,即第一个“之后”。
整个适配器(修订):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = myContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.channel_listview_item, null);
viewHolder = new ViewHolder();
viewHolder.postNameView = (TextView) convertView.findViewById(R.id.channel_listview_item_name);
viewHolder.postTimeView = (TextView) convertView.findViewById(R.id.channel_listview_item_time);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (datas.get(position).getStatus().equalsIgnoreCase("before")) {
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.white));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.white));
} else {
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.text_not_highlighted));
//perform this 'if' only once at this position
if (/*need such condition that occurs only for ONCE*/) {
viewHolder.postNameView.setTypeface(null, Typeface.BOLD);
viewHolder.postTimeView.setTypeface(null, Typeface.BOLD);
viewHolder.postNameView.setTextSize(24);
viewHolder.postTimeView.setTextSize(24);
viewHolder.postTimeView.setTextColor(getResources().getColor(R.color.white));
viewHolder.postNameView.setTextColor(getResources().getColor(R.color.white));
}
}
viewHolder.postNameView.setText(datas.get(position).getTitle());
viewHolder.postTimeView.setText(datas.get(position).getStart());
return convertView;
}
}
static class ViewHolder {
TextView postTimeView;
TextView postNameView;
}
值会根据当前的时间?这会让它变得更加复杂。我没有看到它的代码。同时,我会考虑一下。我喜欢解决算法。 – 2015-04-04 00:47:53
我没有看到setTag用于getView()的父级。但是,您可以使用viewHolder而不是父视图。而且你无论如何都要在TextView上设置字体大小/样式。 – 2015-04-04 01:00:09
@The原始Android,感谢提供提示。但是,我应该如何以及在哪里将标签设置为parentHolder? – AnZ 2015-04-04 07:58:39