【问题标题】:How to change a TextView's (inside a listview) text color according to a variable?如何根据变量更改 TextView(在列表视图内)的文本颜色?
【发布时间】:2015-08-01 21:30:56
【问题描述】:

我正在尝试在适配器中进行如下操作

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        ZgrViewHolder holder;
        mInflater = LayoutInflater.from(mContext);
        QuestionObject questionObject = arrayList_.get(position);

        if(convertView == null) {
            convertView = mInflater.inflate(R.layout.zgr_listview_layout, parent, false);
            holder = new ZgrViewHolder();
            holder.questionTitle = (TextView)convertView.findViewById(R.id.questionTitle);
            holder.questionDate = (TextView)convertView.findViewById(R.id.questionDate);
            holder.questionContent = (TextView)convertView.findViewById(R.id.questionContent);
            holder.senderContact = (TextView)convertView.findViewById(R.id.questionSenderContact);
            holder.messageID = (TextView)convertView.findViewById(R.id.messageID);

            holder.questionTitle.setText(questionObject.mailTitle);
            holder.messageID.setText(String.valueOf(questionObject.messageID));
            holder.questionDate.setText(questionObject.Date_);
            holder.questionContent.setText(questionObject.mailContent);
            holder.senderContact.setText(questionObject.senderContact);

            if (questionObject.ReadState == 1){
                holder.questionTitle.setTextColor(Color.argb(100,100,100,100));
            }

            convertView.setTag(holder);
        } else {
            holder = (ZgrViewHolder)convertView.getTag();
        }
        return convertView;
    }

但是当列表视图完成时,没有一个文本视图具有我指定的颜色。我调试,ReadState 变量有时为 1,但仍然没有。

【问题讨论】:

  • 总是every getView() 调用时更新 every 小部件。现在,只有在扩展布局时才更新它们,而不是在回收行时。
  • @CommonsWare 我刚刚意识到,先生。谢谢。

标签: android listview


【解决方案1】:

试试这个

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    ZgrViewHolder holder;
    mInflater = LayoutInflater.from(mContext);
    QuestionObject questionObject = arrayList_.get(position);

    if(convertView == null) {
        convertView = mInflater.inflate(R.layout.zgr_listview_layout, parent, false);
        holder = new ZgrViewHolder();
        holder.questionTitle = (TextView)convertView.findViewById(R.id.questionTitle);
        holder.questionDate = (TextView)convertView.findViewById(R.id.questionDate);
        holder.questionContent = (TextView)convertView.findViewById(R.id.questionContent);
        holder.senderContact = (TextView)convertView.findViewById(R.id.questionSenderContact);
        holder.messageID = (TextView)convertView.findViewById(R.id.messageID);


        }

        convertView.setTag(holder);
    } else {
        holder = (ZgrViewHolder)convertView.getTag();
    }
        holder.questionTitle.setText(questionObject.mailTitle);
        holder.messageID.setText(String.valueOf(questionObject.messageID));
        holder.questionDate.setText(questionObject.Date_);
        holder.questionContent.setText(questionObject.mailContent);
        holder.senderContact.setText(questionObject.senderContact);

        if (questionObject.ReadState == 1){

        holder.questionTitle.setTextColor(Color.argb(100,100,100,100));
        return convertView;
}

【讨论】:

  • 感谢您的回答。现在一切都清楚了。 Listview 每次滚动时都会调用 getView。知道了。
  • @zgrkpnr89 我今天回答了你的另一个问题stackoverflow.com/questions/31764758/… 让我知道它是否有效
  • 现在还有一个问题。它工作得很好,但是当我滚动它们时,它们都得到了这种颜色。在滚动之前什么都没有发生,现在在滚动所有这些之后(无​​论是 ReadState )都会获得颜色。
  • 那是因为在其他情况下你必须设置其他颜色,因为 convertview 使用最后一个状态并且颜色永远不会再改变
  • 我现在做了,但还是一样。他们都得到了颜色。还有其他想法吗?
【解决方案2】:

请在这段代码之外分配 textview 颜色 if(convertView == null) {} 谢谢并反馈我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多