Я новичок в Android, и я давно уже работал с Java, и я просто пытаюсь создать что-то самостоятельно. По сути, я закончил копировать код из этого Обучающего руководства по просмотру пользовательских списков Android , и я пытаюсь изменить его, чтобы создать представление календаря с каким-то особым поведением. На данный момент я просто хочу, чтобы он отображал текущий месяц и отображал воскресенья и текущий день, используя другой цвет фона. Вот моя версия адаптера класса:
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.util.Log;
import android.view.LayoutInflater;
import java.util.Calendar;
public class MonthViewAdapter extends BaseAdapter {
public MonthViewAdapter(Context c) {
mInflater = LayoutInflater.from(c);
now = Calendar.getInstance();
}
@Override
public int getCount() {
int numDays = now.getActualMaximum(Calendar.DAY_OF_MONTH);
Log.i(this.toString(), "getCount -- numDays = " + numDays);
return numDays;
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.main_list_element, null);
holder = new ViewHolder();
holder.dateText = (TextView) convertView.findViewById(R.id.dateText);
holder.eventText = (TextView) convertView.findViewById(R.id.eventText);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.dateText.setText(String.valueOf(position + 1));
Log.i(this.toString(), "getView -- dateText = " + holder.dateText.getText());
holder.eventText.setText("events" + String.valueOf(position + 1));
Calendar refCal = Calendar.getInstance();
refCal.set(Calendar.DAY_OF_MONTH, position+1);
if(now.get(Calendar.DAY_OF_MONTH) == position+1)
convertView.setBackgroundColor(Color.GRAY);
else if(refCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
convertView.setBackgroundColor(Color.DKGRAY);
return convertView;
}
static class ViewHolder {
TextView dateText;
TextView eventText;
}
private Context mContext;
private LayoutInflater mInflater;
private Calendar now;
}
Поначалу кажется, что это работает, но когда я начинаю прокручивать вид, он начинает сбивать нужные цвета фона. Мой первый вопрос - почему это происходит, а второй вопрос - почему он не разбивает текстовые поля согласованно с цветами, так как оба должны быть сброшены с использованием значения аргумента position.