如何从处理程序更改listview项目文本颜色和图像颜色

时间:2017-02-16 07:50:50

标签: java android

我是android的新手,我有ListView自定义适配器,如果ListView项中的匹配项想要更改Activity的列表项文本颜色,我会传递一个字符串。

这是我的代码:

MyActivity:



public void handleResult(String rawResult) {    

        if(Utility.isNotNull(rawResult.getText().toString())) {
            for(int i=0;i<listView.getAdapter().getCount();i++){
                if(rawResult.equals(listItems.get(i).getStockItems())){
        
                 // listView.getChildAt(i).setBackgroundColor(ContextCompat.getColor(context, R.color.hint));
      
                    
                    /* Here I want to change list item text color*/
                    
                    adapter.notifyDataSetChanged();
                               
                            
                }
            }
        }
    }
&#13;
&#13;
&#13;

提前致谢!

5 个答案:

答案 0 :(得分:0)

UI任务只能在UI线程上完成。如果你想从处理程序运行它,你必须定义一个runOnUiThread方法。看看这个ans

how to use runOnUiThread

答案 1 :(得分:0)

试试这段代码:

for(int i=0;i<listView.getChildCount();i++) {
  // yours code
  View item = listView.getChildAt(i);
  item.setBackgroundResource(R.drawable.your_image);  //change image
    ((TextView)item.findViewById(R.id.text1)).setTextColor(Color.RED);   //text1 is your cusotm listview item's  text id
    adapter.notifyDataSetChanged();?   
}

答案 2 :(得分:0)

我假设您使用TextView,要更改文字颜色,首先需要让他,在您创建商品时,将ID添加到TextView

with xml

<TextView
    android:id="@+id/myId"...

或者如果你使用java

textView.setId(R.id.myId)

并在您的代码中:

((TextView)listView.getChildAt(i).findViewById(R.id.myId)).setTextColor(ContextCompat.getColor(context, R.color.hint));

如果您想使用Drawble Image设置项目背景,您可以使用 .setBackground(getResources()getDrawable(R.drawable.yourDrawble));

答案 3 :(得分:0)

在你的模型类中添加一个这样的参数

      public class DataHolder{

        private String StockItems;
        private int isSelected;

        public DataHolder(String StockItems, int isSelected) {
            this.StockItems = StockItems;
            this.isSelected = isSelected;

        }

        public String getStockItems() {
            return StockItems;
        }

        public void setStockItems(String StockItems) {
            this.StockItems = StockItems;
        }

        public int getiIsSelected() {
            return isSelected;
        }

        public void setIsSelected(String isSelected) {
            this.isSelected = isSelected;
        }
    }

初始化IsSelected零

    public void handleResult(String rawResult) {    
            if(Utility.isNotNull(rawResult.getText().toString())) {
                for(int i=0;i<listView.getAdapter().getCount();i++){
                    if(rawResult.equals(listItems.get(i).getStockItems())){   
                        listItems.get(i).setIsSelected(1);
                        adapter.notifyDataSetChanged();                                                      
                    }
                }
            }
        }

在你的cusom适配器类中检查

      if(listItems.get(i).getiIsSelected()==1)
      {
            //set red text color
      }
      else
      {
            //set black text color
      }

答案 4 :(得分:0)

在Adapter类中创建一个方法来更新文本颜色并在Adapter中创建一个最初为false的标志,使用以下方法执行此操作

boolean isChangeColor = false;
String  colorCode = "#FFFFFF";

private void updateTextColor(boolean isChangeColor , String colorCode) {
    this.isChangeColor=isChangeColor;
    this.colorCode=colorCode;
    notifyDataSetChanged();
        
}

在getView()

if(isChangeColor) {
    textView.setTextColor(Color.parseColor(colorCode));
} else {
    colorCode = "#FFFFFF";
    textView.setTextColor(Color.parseColor(colorCode));
}