2016-12-29 73 views
0

我期待在getView()中設置所選項目,但正在工作,但是我的列表中的每個項目都被選中。我已用吐司進行過測試,並顯示正確的條件以便工作。條件檢查以查看特定項目的數據庫條目是否設置爲true(因此被選中)。getView ListView所選項目顏色變化

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    if(isItemSelected.equals("true")){ 
      listviewTitles.setBackgroundColor(0xAAAAFFFF); 
    } 
    else if (isItemSelected.equals("false")){ 
    // Default color  
    } 
} 
+1

沒有你所寫的listviewTitles.setBackgroundColor(非選定的顏色);在其他部分 –

+0

你想突出顯示一個特定的單元格?如果是這樣的話,你也可以設置你的單元佈局的背景,像這樣linearLayout.setBackgroundResource(COLOR.GREY); –

+0

請將整個代碼放在getView()中---檢查您是否正在回收列表中的視圖,因爲如果您選擇的項目在回收時已被選中!如果多數民衆贊成什麼發生! – shadygoneinsane

回答

1

你應該更新你的背景顏色,像下面的每個條件;

listviewTitles.setBackgroundColor(isItemSelected.equals("true") ? selectedColor : unSelectedColor); 
+0

Didnt for me – user3175140

0

試試這個,並在代碼中進行這些更改,希望它能夠解決。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) {  
     if (isItemSelected.equals("true")){ 
listviewTitles.setBackgroundColor(0xAAAAFFFF); 
      } 
      else if (isItemSelected.equals("false")){ 
      // Default color  
      } 
      }else{ 

     if (isItemSelected.equals("true")){ 

    listviewTitles.setBackgroundColor(0xAAAAFFFF); 
      } 
      else if (isItemSelected.equals("false")){ 
      // Default color  
      } 
     } 

請儘量將

+0

Didnt for me – user3175140

0

我相信我對你的需求的解決方案,

在視圖文件中的代碼粘貼

SparseBooleanArray singleChecked; 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     if (position != singleListSelectedPosition) { 
      singleListSelectedPosition = position; 
      int totalCount = lvSingleSelect.getCount(); 
      for (int i = 0; i < totalCount; i++) { 
       if (i == position) { 
        boolean stat = singleChecked.get(position, false); 
        singleChecked.put(position, !stat); 
       } else { 
        singleChecked.put(i, true); 
       } 
      } 
      adapter.setChecked(singleChecked); 
     } 
    } 

這是您的適配器類代碼:

public void setChecked(SparseBooleanArray ch) { 
     singleChecked = ch; 
     notifyDataSetChanged(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (singleChecked.get(position, false)) { 
     convertView.setBackgroundColor(getResources() 
        .getColor(R.color.titlebar_background_color)); 
    } else { 
     convertView.setBackgroundColor(
        getResources().getColor(R.color.emphasis_color)); 
    } 

請讓我知道如果你有任何麻煩,總是樂於幫助。

+0

Didnt for me – user3175140

+0

同樣的問題你越來越??,讓我知道你是用這個代碼得到什麼問題。 – Bethan

0

我想你應該嘗試添加一個額外的值,如布爾值,同時在你的數組列表中添加數據。對於選中爲true,對於未選中爲false。最初爲所有添加false。然後當你點擊listviewTitles

int positionClicked; 

listviewTitles.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      for (int i = 0; i < bean_List.size(); i++) { 
      if (i == position) { 
       positionClicked = position; 
       bean_List.get(position).setIsClicked(true); 
       notifyDataSetChanged(); 
       //Do your task here... 
      } else { 
       bean_List.get(i).setIsClicked(false); 
       notifyDataSetChanged(); 
      } 
    } 
}); 

而且在getView()使用此: -

if (bean_List.get(position).getIsClicked() == true) { 
     listviewTitles.setBackgroundColor(0xAAAAFFFF); 
     //change color accordingly 
    } else { 
     listviewTitles.setBackgroundColor(0xAAAAFFFF); 
     //change color accordingly 
    } 
+0

沒有爲我工作 – user3175140

相關問題