Spinner - сосредоточиться на первом элементе - программирование

Spinner - сосредоточиться на первом элементе

Я использую выпадающий счетчик с адаптером курсора. Он содержит, например, 1 - 100 пунктов. Я выбираю, например. пункт 50. Элемент выбран. В следующий раз, когда я открываю первую строку с прядильщиком, это элемент 50. Как я могу достичь этого, когда я открываю счетчик, он будет фокусироваться на первом элементе/первый видимый элемент будет элементом 1?

Я имею в виду автопрокрутку в списке, поэтому первый видимый элемент в раскрывающемся списке - первый и не выбран.

4b9b3361

Ответ 1

Вы можете сделать Spinner делать то, что вы хотите, расширив его и переопределив два метода, которые отвечают за настройку/показ списка значений:

public class CustomSpinnerSelection extends Spinner {

    private boolean mToggleFlag = true;

    public CustomSpinnerSelection(Context context, AttributeSet attrs,
            int defStyle, int mode) {
        super(context, attrs, defStyle, mode);
    }

    public CustomSpinnerSelection(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomSpinnerSelection(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomSpinnerSelection(Context context, int mode) {
        super(context, mode);
    }

    public CustomSpinnerSelection(Context context) {
        super(context);
    }

    @Override
    public int getSelectedItemPosition() {
        // this toggle is required because this method will get called in other
        // places too, the most important being called for the
        // OnItemSelectedListener
        if (!mToggleFlag) {
            return 0; // get us to the first element
        }
        return super.getSelectedItemPosition();
    }

    @Override
    public boolean performClick() {
        // this method shows the list of elements from which to select one.
        // we have to make the getSelectedItemPosition to return 0 so you can
        // fool the Spinner and let it think that the selected item is the first
        // element
        mToggleFlag = false;
        boolean result = super.performClick();
        mToggleFlag = true;
        return result;
    }

}

Он должен отлично работать для того, что вы хотите сделать.

Ответ 2

Вы можете установить выбор Spinner для первого элемента следующим образом:

yourspinner.setSelection(0);

Возможно, вы захотите сделать это в методе onStart().

Ответ 3

Этот код не будет работать для вас.

    int prevSelection=0;
    spSunFrom = (Spinner) findViewById(R.id.spTimeFromSun);
    spSunFrom.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            prevSelection = spSunFrom.getSelectedItemPosition();
            spSunFrom.setSelection(0);
            return false;
        }
    });
    spSunFrom.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            if(arg2==0)
                spSunFrom.setSelection(prevSelection);
            prevSelection = arg2;

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            spSunFrom.setSelection(prevSelection);
        }
    });