Android Custom Spinner: установите переключатель в положение «Выбрать» - PullRequest
0 голосов
/ 27 июля 2011

Я создал специальный адаптер для моего счетчика, потому что хотел иметь несколько рядов.Тем не менее, я бы хотел воссоздать модель вращателя андроида с помощью переключателя, который выбирается при выборе элемента вращателя.Все работает нормально, за исключением того, что я не понимаю, как проверить переключатель, когда выбран элемент списка.

Мой CustomCursorAdapter Код пользовательского адаптера:

    @Override
public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {
    super.newDropDownView(context, cursor, parent);

    View view = View.inflate(context, R.layout.grain_spinner_row, null);
    int nameColumn = cursor.getColumnIndex("name");
    String getName = cursor.getString(nameColumn);
    TextView name = (TextView)view.findViewById(R.id.GrainSpinnerName);
    name.setText(getName);

    int loviColumn = cursor.getColumnIndex("lovibond");
    String getLovi = cursor.getString(loviColumn);
    TextView lovi = (TextView)view.findViewById(R.id.GrainSpinnerLovibond);
    lovi.setText(getLovi);

    int gravityColumn = cursor.getColumnIndex("gravity");
    String getGravity = cursor.getString(gravityColumn);
    TextView gravity = (TextView)view.findViewById(R.id.GrainSpinnerGravity);
    gravity.setText(getGravity);

    rb = (RadioButton)view.findViewById(R.id.GrainSpinnerRadio);

    return view;
}

public static void toggleRadio(){
    if(!(rb.isChecked())){
        rb.toggle();
    }
}

OnSelectedItemChanged code:

        @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
        //Collects the id from the currently selected item so we can use that to reference the ingredient in the recipe database.
        //Because we are using a SimpleCursorAdapter to populate nameSpinner, we must use a cursor to request currentName.
        Cursor cc = (Cursor)(nameSpinner.getSelectedItem());
        currentName = cc.getString(cc.getColumnIndex("name"));
        String sql = "SELECT * FROM grain WHERE name = '" + currentName + "' AND origin = '" + currentOrigin + "'";
        Cursor data = database.rawQuery(sql, null);
        data.moveToFirst();

        int nameColumn = data.getColumnIndex("name");
        int loviColumn = data.getColumnIndex("lovibond");
        int gravityColumn = data.getColumnIndex("gravity");
        int originColumn = data.getColumnIndex("origin");

        String currentIngredientName = data.getString(nameColumn);
        String currentIngredientLovi = data.getString(loviColumn);
        String currentIngredientGravity = data.getString(gravityColumn);
        String currentIngredientOrigin = data.getString(originColumn);

        addIngredient = new String[4];
        addIngredient[0] = currentIngredientName;
        addIngredient[1] = currentIngredientLovi;
        addIngredient[2] = currentIngredientGravity;
        addIngredient[3] = currentIngredientOrigin;



GrainSpinnerAdapter.toggleRadio();
    }

LogCat выдает ошибку nullexpression по адресу:

GrainSpinnerAdapter.toggleRadio();

и

if(!(rb.isChecked())){

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Вот как я это сделал ...

Прежде всего, если вы используете SimpleCursorAdapter, вам не нужно предоставлять полную реализацию (newView), которая раздувает представления - она ​​делает это за вас.Если вам нужно сделать это, то вы должны быть производными от CursorAdapter.Во всяком случае ...

  • В вашем XML для элемента используйте CheckedTextView для переключателя (это то, что использует вращатель Android)
  • На вашем адаптере выставьте свойство SelectedItemPosition
  • В адаптере переопределите BindView () и установите состояние проверки CheckedTextView на основе текущей позиции выбранного элемента
  • В упражнении вызовите установщик для установки адаптера SelectedItemPosition при необходимости

Я не уверен, как система Android управляет состоянием проверки их представления, не имея выбранной позиции элемента на адаптере, поэтому я, по-видимому, что-то упустил, но это сработало для меня.

0 голосов
/ 27 июля 2011

Если ваш вопрос так прост, как кажется (просто изменяя состояние переключателя при выборе вращателя), вы можете вызвать метод toggle () для переключателя, который инвертирует состояние переключателя. Вы также можете объявить свой RadioButton и вызвать метод isChecked.

RadioButton myRadioButton = (RadioButton) findViewById(R.id.My_RadioButton);

public void YourSpinnerItemMethod () {
    if ( !(myRadioButton.isChecked()) )
         myRadioButton.toggle();
}

EDIT:

OnSelectedItemChange {
  YOUR_CODE;
  Class_Containing_Radio_Button.toggleButton();
}

Class_Containing_Radio_Button.class {
  RadioButton myButton;

  toggleButton() {
    myButton.toggle();
  }

  onCreate() {
    myButton = (RadioButton) findViewById(R........);
  }
}

тогда у вас также может быть метод, который реагирует на состояние проверки RadioButton с помощью метода isChecked (). Удачи!

...