2013-11-11 3 views
0

Я пытаюсь изменить цвет строки фона в представлении списка на основе параметра и на строке View v = super.getView(position, convertView, parent), что дает мне ошибку «Невозможно напрямую вызвать абстрактный метод getView (int , View, ViewGroup) для типа «Адаптер». Вот весь код.Изменение цвета фона строки списка условно

public class CustomListViewAdapter extends BaseAdapter 
{ 

LayoutInflater inflater; 
List<ListViewItem> items; 

public CustomListViewAdapter(Activity context, List<ListViewItem> items) { 
    super(); 

    this.items = items; 
    this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 

    ListViewItem item = items.get(position); 

    if(convertView==null) 
     v = inflater.inflate(R.layout.my_hospitals, null); 
     TextView status = (TextView) v.findViewById(R.id.status); 
     TextView name = (TextView) v.findViewById(R.id.name); 
     TextView table = (TextView) v.findViewById(R.id.id); 
     TextView info = (TextView) v.findViewById(R.id.info); 

     status.setText(item.status); 
     name.setText(item.name); 
     table.setText(item.table); 
     info.setText(item.info); 

     if (item.status == "green"){ 
      v.setBackgroundColor(Color.GREEN); 
     } 

    return v; 
} 
} 
+0

Dude ! Никогда 'item.status ==" green "' в JAVA, поскольку он не работает так, как вы этого хотите, используйте '" green ".equals (item.status);' (это также спасет вас, если 'item == null ') – petey

ответ

1

Изменение GetView()

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View v=convertView; 
    ListViewItem item = items.get(position); 

    if(v==null){ 
     v = inflater.inflate(R.layout.my_hospitals, null); 
    } 
     TextView status = (TextView) v.findViewById(R.id.status); 
     TextView name = (TextView) v.findViewById(R.id.name); 
     TextView table = (TextView) v.findViewById(R.id.id); 
     TextView info = (TextView) v.findViewById(R.id.info); 

     status.setText(item.status); 
     name.setText(item.name); 
     table.setText(item.table); 
     info.setText(item.info);  
     String state=tem.status; 


     if (state.equals("green"){ 
      v.setBackgroundColor(Color.GREEN); 
     } 

    return v; 
} 
+0

' status' - это TextView, а не строка. это будет круто. – petey

+0

@petey да, вы правы. Теперь я отредактировал имя переменной .. –

+0

он не будет работать, в некоторых случаях кажется, что вы не знаете, что просмотры повторного использования списка ... – Selvin

0

также как ошибка говорит, что вы не можете сделать это

View v = super.getView(position, convertView, parent); 

вместо этого вы должны делать

View v = convertView; 

затем проверить, если v является нулевым

if(v == null){ 
    //get the view 
} 
0

Может быть, я не понял Н.Д. хорошо ваш вопрос, но вместо этого

item.status == "green" 

Используйте этот

item.status.equals ("зеленый")

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