пятница, 8 октября 2010 г.

Список с чекбоксами.

Эта статья является развитием предведущей статьи “Список с картинками”.
Для того чтобы сделать список, который включает в себя чекбоксы, необходимо сделать несколько вещей. Во-первых в CheckBoxifiedText.java, необходимо сделать поле для текста а так же поля для отслеживания статуса флажка (стоит ли галочка). Конструктор инициализирует это текстовое поле, а так же определяет статус записи(выставляет галку). Остальные методы не отличаются от аналогичных для записи с картинкой.
public class CheckBoxifiedText implements Comparable{
private String mText = "";
private boolean mChecked;
public CheckBoxifiedText(String text, boolean checked) {
 /* constructor */ 
mText = text;
mChecked = checked;
}
public void setChecked(boolean value){
this.mChecked = value;}
public boolean getChecked(){
return this.mChecked;
}
public String getText() {
return mText;
}
public void setText(String text) {
mText = text;
}
/** Make CheckBoxifiedText comparable by its name */
//@Override
public int compareTo(CheckBoxifiedText other) {
if(this.mText != null)
return this.mText.compareTo(other.getText());
else
throw new IllegalArgumentException();
}
}
Во-вторых, в классе адаптера CheckboxifiedTextViewAdapter.java нужно добавить код для поддержки флажков. (getChecked ()возвращает состояние флажка). Также необходимо добавить несколько специфичных методов, таких как получение состояния чекбокса или установка во всех чекбоксах галочек.
public class CheckBoxifiedTextListAdapter extends BaseAdapter {
/** Сохранение контекста для создания вьюверов. */
private Context mContext;
private List mItems = new ArrayList();
public CheckBoxifiedTextListAdapter(Context context) {
mContext = context;
}
public void addItem(CheckBoxifiedText it) { mItems.add(it); }
public void setListItems(List lit) { mItems = lit; }
/** @return Число записей */
public int getCount() { return mItems.size(); 
}
public Object getItem(int position) { return mItems.get(position); }
public void setChecked(boolean value, int position){
mItems.get(position).setChecked(value);
}
// метод выставления галочек у всех записей
public void selectAll(){
for(CheckBoxifiedText cboxtxt: mItems)
cboxtxt.setChecked(true);
/* Перерисовка */
this.notifyDataSetInvalidated();
}
// метод удаления всех галочек 
public void deselectAll()
{
for(CheckBoxifiedText cboxtxt: mItems)
cboxtxt.setChecked(false);
/* Перерисовка */
this.notifyDataSetInvalidated();
}
public boolean areAllItemsSelectable() { return false; }
/** Возвращение позиции */
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
CheckBoxifiedTextView btv;
if (convertView == null) {
btv = new CheckBoxifiedTextView(mContext, mItems.get(position));
} else { /
CheckBoxifiedText src = mItems.get(position);
btv = (CheckBoxifiedTextView) convertView;
btv.setCheckBoxState(src.getChecked());
btv = (CheckBoxifiedTextView) convertView;
btv.setText(mItems.get(position).getText());
}
return btv;
}
}
Теперь необходимо добавить класс для построения вьювера записи, он аналогичен классу из прошлой статьи:
public class CheckBoxifiedTextView extends LinearLayout {
private TextView mText;
private CheckBox mCheckBox;
private CheckBoxifiedText mCheckBoxText;
public CheckBoxifiedTextView(Context context, CheckBoxifiedText aCheckBoxifiedText) {
super(context);
this.setOrientation(HORIZONTAL);
mCheckBoxText = aCheckBoxifiedText;
mCheckBox = new CheckBox(context);
mCheckBox.setPadding(0, 0, 20, 0); // 5px to the right
/* Установка или не установка галочки */
mCheckBox.setChecked(aCheckBoxifiedText.getChecked());
/* At first, add the CheckBox to ourself
addView(mCheckBox,  new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mText = new TextView(context);
mText.setText(aCheckBoxifiedText.getText());
//mText.setPadding(0, 0, 15, 0);
addView(mText, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
public void setText(String words) {
mText.setText(words);
}
public void setCheckBoxState(boolean bool){
mCheckBox.setChecked(mCheckBoxText.getChecked());
mCheckBoxText.setChecked(true);
}
}
Переведено и модифицировано с
http://www.anddev.org

Комментариев нет:

Отправить комментарий