【问题标题】:Changing text color in Listview using SimpleCursorAdapter.ViewBinder使用 SimpleCursorAdapter.ViewBinder 在 Listview 中更改文本颜色
【发布时间】:2011-12-15 07:11:22
【问题描述】:

我已经使用SimpleCursorAdapter 列出了数据库中的名称,我想使用SimpleCursorAdapter.ViewBinder 的方法更改特定名称的颜色。运行此方法时遇到问题,我的数据库包含不同的名称,但 ListView 会将所有名称显示为一个特定名称。我究竟做错了什么?如何更改特定名称的文本颜色?可以使用ViewBinder吗?

这是我为ViewBinder 编写的部分代码:

    SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {

    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        // TODO Auto-generated method stub
        String[] temp = dh.return_result();
        tv = (TextView)findViewById(R.id.textView1);
        tv = (TextView) view;
        for(int i = 0; i<temp.length; i++)
        {
            if(temp[i].equalsIgnoreCase("Ameer Zhann"))
            {
                tv.setText(temp[i]);
                tv.setTextColor(Color.rgb(58, 58, 224));
                return true;
            }
        }
        return false;
    }
};

这是我的输出图像:

我该如何解决这个问题?

【问题讨论】:

    标签: android android-listview simplecursoradapter android-viewbinder


    【解决方案1】:

    试试这个方法:

    public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
        int getIndex = cursor.getColumnIndex("Name");
        String empname = cursor.getString(getIndex);
        tv = (TextView) view;
        tv.setTextColor(Color.WHITE);
        tv.setText(empname);
        if(empname.equals("Any String"))
        {                   
            tv.setTextColor(Color.rgb(58, 58, 224));
            return true;
        }
        return false;           
    }
    

    【讨论】:

      【解决方案2】:

      代码完全按照您的要求进行 - 对于Cursor 中的每个元素,您将遍历所有列表并设置每个元素的文本。我认为“Ameer Zhann”是您列表中的最后一个结果,所以TextView 中只剩下这段文字。

      Cursor 的每个元素调用方法setViewValue(...)。因此,您不需要任何循环,只需使用光标值 tv.setText(Cursor.getString(...)); 填充文本即可。

      这段代码也有一些奇怪的地方:

      tv = (TextView)findViewById(R.id.textView1);
      tv = (TextView) view; 
      

      view 作为参数出现 - 已经使用 id R.id.textView1 查看 - 所以只需删除对 findViewById 的调用。

      【讨论】:

      • 如果我删除 findViewById 表示,它会影响列表视图而不是文本视图。所以,这很重要
      【解决方案3】:

      尝试其他部分

      if(temp[i].equalsIgnoreCase("Ameer Zhann")){
          tv.setText(temp[i]);
          tv.setTextColor(Color.rgb(58, 58, 224));
      }else{
          tv.setText(temp[i]);
      }
      

      最后返回 true 而不是 false

      【讨论】:

      • 是的,这个 else 部分也很重要。谢谢
      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多