2017-02-16 65 views
0

我是新的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();
        
        
 
       } 
 
      } 
 
     } 
 
    }

提前感謝!

回答

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 
     } 
+0

太謝謝你了! – appu

0

UI任務只能在UI線程上完成。如果你想從處理程序運行它,你必須定義一個runOnUiThread方法。看看這個答案

how to use runOnUiThread

+0

我記得處理器運行在UI線程 –

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();? 
} 
0

我假設你使用TextView,要改變他的文本顏色,首先你需要得到他,當你創建項目,ID添加到TextView

與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圖片您可以使用 .setBackground(getResources()getDrawable (R.drawable.yourDrawble));

0

進行一個方法在你的適配器類要更新文本顏色並在適配器中創建一個最初爲false的標誌,請使用以下符號霍德做在getView這

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

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

和()

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