Показывать всплывающее сообщение, когда счетчик андроида пуст

У меня есть счетчик, который заполняется из базы данных. Поэтому, если щелкнуть счетчик без элементов, отображается счетчик с пустым элементом списка. Я хочу не показывать счетчик, когда он пуст, и показывать всплывающее сообщение. У меня есть логика, чтобы проверить количество элементов и показать всплывающее сообщение, но я не могу найти, где вызвать функцию. Какое событие вызывается при нажатии счетчика и загрузке элементов счетчика?


person viks    schedule 05.12.2012    source источник
comment
Я добавил немного кода, у меня он работает полностью.   -  person stealthjong    schedule 05.12.2012


Ответы (3)


Spinner является подклассом View, поэтому View.setOnClickListener() можно использовать для изменения реализации onClick(), которая будет вызываться при нажатии. Вы можете переопределить onClick(), чтобы проверить, пусто ли Spinner, а затем показать Toast.

Исправление:

Поскольку вы не можете использовать setOnClickListener для Spinner, вы можете использовать решение, предложенное в этом вопросе (содержимое которого я вставил ниже).

Вместо установки OnClickListener счетчика мы устанавливаем OnTouchListener и OnKeyListener.

spinner.setOnTouchListener(Spinner_OnTouch);
spinner.setOnKeyListener(Spinner_OnKey);

и слушатели:

private View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            doWhatYouWantHere();
        }
        return true;
    }
};
private static View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            doWhatYouWantHere();
            return true;
        } else {
            return false;
        }
    }
};
person Mohamed_AbdAllah    schedule 05.12.2012
comment
Отображаемое сообщение об ошибке: «Не вызывайте setOnClickListener для AdapterView. Возможно, вы захотите использовать setOnItemClickListener». Но это не подходит для моей цели. - person viks; 05.12.2012

Почему бы не установить onClickListener?

Spinner s = (Spinner)findViewById(R.id.myspinner);
s.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        checkForItemCount();    //where you show your Toast if it's empty.
    }
});

Редактировать: я думаю, что не полностью охватываю ваш вопрос, поэтому я сам попробовал код. Это работает исключительно для вас.

final Spinner s = (Spinner)findViewById(R.id.spinner1); // get reference
    ArrayList<String> mList = new ArrayList<String>();  //some list without items
    s.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mList));
    s.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP && mList.size() == 0) {
                toast("Empty"); //lazy method for toasting
                s.setPressed(false); //closes the spinner.
            }
            return true;
        }
    });
person stealthjong    schedule 05.12.2012
comment
Я пробовал это, но сообщение об ошибке показывает, что вы не можете установить onclicklistener для счетчика. - person viks; 05.12.2012
comment
Попробуйте вместо этого использовать s.setOnClickListener(new View.OnClickListener() { - person Mohamed_AbdAllah; 05.12.2012
comment
Это работает, но всплывающее сообщение отображается 3-4 раза... Вызывается ли touchlistener всякий раз, когда вызывается setselection? - person viks; 05.12.2012
comment
@viks В этом случае просто используйте setOnClickListerer(). TouchListener может быть не очень хорошей идеей. - person stealthjong; 05.12.2012
comment
проверка, если (event.getAction() == MotionEvent.ACTION_UP) в онтоучлистенер работает для меня - person viks; 05.12.2012
comment
@viks Отличная идея, я добавил ее в код. Если вы когда-нибудь захотите открыть свой счетчик (например, когда счетчик заполнен, вызовите s.performClick()). - person stealthjong; 05.12.2012

Это функция, когда элемент выбран, если вы об этом спрашивали. Для получения дополнительной помощи вам нужно будет опубликовать свой код. В противном случае мы понятия не имеем, что у вас происходит.

spinner.setOnItemSelectedListener(new OnItemSelectedListener()

person codeMagic    schedule 05.12.2012
comment
Нет, я хочу не показывать элементы счетчика, если счетчик равен 0. Я должен проверить, когда пользователь нажимает на текстовое поле, например, вид, показанный вместо счетчика. - person viks; 05.12.2012