2015-09-07 1 views
0

Я пишу фрагмент кода с расписанием, указанным в списке. Цель состоит в том, чтобы изменить фон определенного элемента в списке между определенным временем. Например, когда его 3:40, элемент, который говорит 3: 00-4: 00, будет иметь зеленый фон, а когда он станет 4:00, фон вернется к белому. Есть идеи, как это сделать? Вот мой соответствующий код.Как вы пассивно меняете фон одного элемента в списке?

final ListView schedule = (ListView) findViewById(R.id.schedule); 
    String[] myKeys = getResources().getStringArray(R.array.friday_schedule); 
    schedule.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys)); 
    Calendar c = Calendar.getInstance(); 
    final int hour = c.get(Calendar.HOUR); 
    if(hour<6&&hour>5) 
    { 
     schedule.item(0).setBackgroundColor(Color.CYAN); 
    } 

Кроме того, для справки, это вопрос похож this. И просто скажите, не забыл ли я приложить часть своего кода. Благодаря!

ответ

2

Рассмотрите возможность создания подкласса ArrayAdapter, который переопределяет getView(). getView() бы какая-то логика, как это:

... 
final ListView schedule = (ListView) findViewById(R.id.schedule); 
String[] myKeys = getResources().getStringArray(R.array.friday_schedule); 
schedule.setAdapter(new ScheduleAdapter(this, android.R.layout.simple_list_item_1, myKeys)); 
... 

public static class ScheduleAdapter extends ArrayAdapter<String> { 

    public ScheduleAdapter(Context context, int resource, String[] schedule) { 
     super(context, resource, schedule); 
    } 

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

     View view = super.getView(position, convertView, parent); 
     // compare current clock hour to the hour this item represents 
     boolean isCurrentHour = position == ... <your logic goes here> 
     view.setBackgroundResource(isCurrentHour ? R.color.current_hour : R.color.normal_hour); 
     return view; 
    } 

} 

Затем на час, позвоните notifyDataSetChanged() на адаптере, и ListView будет перерисовывать с цветами изменились.

Здесь я показываю ScheduleAdapter как внутренний класс вашей деятельности с помощью ListView.

+0

Если я создаю подкласс ArrayAdapter, то он: a) должен иметь определенное имя b) должен иметь не только метод getView? А также, как бы связать подкласс с моим списком? будет schedule.setAdapter (новый ArrayAdapter (className, android.R.layout.simple_list_item_1, myKeys)); Работа? –

+0

Вы должны дать вашему подклассу имя; это может быть любое имя, но, по соглашению, это будет нечто вроде «ScheduleAdapter». Если вы можете определить час из позиции списка, вам не нужно больше конструктора и 'getView()' override. Я обновил свой ответ с помощью некоторого примера кода. –

+0

Я думаю, вы хотели написать ScheduleAdapter вместо arrayadapter для конструктора. Правильно? –

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