2016-12-29 2 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

Did not work 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

Did not work 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

Не работает для меня – user3175140

+0

Есть ли та же проблема, что вы все еще?, Дайте мне знать, в чем проблема, которую вы получаете с помощью этого кода. – Bethan

0

Я думаю, вы должны попробовать добавить дополнительное значение, например boolean, при добавлении данных в ваш arraylist. 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

Смежные вопросы