Упрощенный Блесны Андроид


Я написал простую обертку блесны, но было интересно, если любой из вас мог бы придумать какие-то способы сделать ее более надежной. Он обрабатывает только строки на данный момент.

MySpinner:

package a.b.c;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MySpinner extends Spinner {

    // constructors (each calls initialise)
    public MySpinner(Context context) {
        super(context);
        this.initialise();
    }
    public MySpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.initialise();
    }
    public MySpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.initialise();
    }

    // declare object to hold data values
    private ArrayAdapter<String> arrayAdapter;

    // add the selected item to the end of the list
    public void addItem(String item) {
        this.addItem(item, true);
    }
    public void addItem(String item, boolean select) {
        arrayAdapter.add(item);
        this.setEnabled(true);
        if (select) this.selectItem(item);
        arrayAdapter.sort(new Comparator<String>() {
            public int compare(String object1, String object2) {
                return object1.compareTo(object2);
            };
        });
    }

    // remove all items from the list and disable it
    public void clearItems() {
        arrayAdapter.clear();
        this.setEnabled(false);
    }

    // make the specified item selected (returns false if item not in the list)
    public boolean selectItem(String item) {
        boolean found = false;
        for (int i = 0; i < this.getCount(); i++) {
            if (arrayAdapter.getItem(i) == item) {
                this.setSelection(i);
                found = true;
                break;
            }
        }
        return found;
    }

    // return the current selected item
    public String getSelected() {
        if (this.getCount() > 0) {
            return arrayAdapter.getItem(super.getSelectedItemPosition());
        } else {
            return "";
        }
    }

    // allow the caller to use a different DropDownView, defaults to android.R.layout.simple_dropdown_item_1line
    public void setDropDownViewResource(int resource) {
        arrayAdapter.setDropDownViewResource(resource);
    }
    // internal routine to set up the array adapter, bind it to the spinner and disable it as it is empty
    private void initialise() {
        arrayAdapter = new ArrayAdapter<String>(super.getContext(), android.R.layout.simple_spinner_item);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        this.setAdapter(arrayAdapter);
        this.setEnabled(false);
    }
}

Использовать:

  1. Используйте это.б.С. MySpinner вместо блесны в XML-файл layout
  2. Создать переменную, mMySpinner = (MySpinner)команду findViewById(Р. ИД.пряха);
  3. Затем вы можете использовать все функции, которые должны быть очевидны
  4. Если нет элементов в списке, счетчик отключен, чтобы избежать нежелательных событий

  • mMySpinner.clearItems() - удалить все элементы
  • mMySpinner.метод addItem("синий") - добавить синего в качестве элемента в список (элементы сортируются по алфавиту)
  • mMySpinner.позиция selectitem("Красный") - чтобы указать пункт текущего выбора
  • mMySpinner.getSelected() - возвращает текущий выбранный элемент строки


18086
11
задан 31 января 2011 в 08:01 Источник Поделиться
Комментарии
1 ответ

Несколько способов вы могли бы сделать его более надежным.


  1. В getSelected(), почему бы не назвать getSelectedItem() вместо этого?

  2. Вы склонны использовать супер.фу() вместо функции foo(); это обычно плохая идея. Просто вызвать функцию Foo(), если вы действительно хотите, чтобы избежать каких-либо переопределить в своем классе. Если вы всегда использовать супер.функция Foo(), затем, если вы решите, что вы хотите переопределить функцию Foo(), возможно, для некоторых отладки кода, Вы должны пойти изменить свой код везде от супер.функция Foo() , чтобы просто фу() или, возможно, это.фу().

  3. Этот код не похоже, чтобы обеспечить согласованность политики дубликатов в блесну. Если дубликаты не разрешены, возможно хорошо проверить на Добавить время.

3
ответ дан 1 февраля 2011 в 09:02 Источник Поделиться