【问题标题】:Show a toast message when an android spinner is empty当 android spinner 为空时显示 toast 消息
【发布时间】:2012-12-05 14:21:47
【问题描述】:

我有一个从数据库中填充的微调器。因此,如果在其中没有任何项目的情况下单击微调器,则会显示一个带有空列表项的微调器。我想避免在微调器为空时显示该微调器并显示一条 toast 消息。我有检查项目计数并显示 toast 消息的逻辑,但我找不到调用函数的位置。单击微调器并加载微调器项目时调用的事件是什么?

【问题讨论】:

  • 我添加了一些代码,对我来说它完全可以工作。

标签: android android-spinner


【解决方案1】:

为什么不设置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;
        }
    });

【讨论】:

  • 我试过了,但是错误信息显示你不能为spinner设置onclicklistener
  • 尝试改用s.setOnClickListener(new View.OnClickListener() {
  • 这可行,但 toast 消息显示 3-4 次...每当调用 setselection 时是否调用 touchlistener?
  • @viks 在这种情况下,只需使用 setOnClickListerer()。 touchListener 可能不是一个好主意。
  • @viks 好主意,我把它放在代码中。如果你想打开你的微调器(例如,当微调器装满时,请致电s.performClick())。
【解决方案2】:

Spinner 是View 的子类,所以View.setOnClickListener() 可以用来改变onClick() 的实现,当它被点击时会被调用。您可以覆盖onClick() 以检查Spinner 是否为空,然后显示Toast。

更正:

由于Spinner 不能使用setOnClickListener,因此可以使用question 中建议的解决方案(我已将其内容粘贴在下面)。

我们设置的是 OnTouchListener 和 OnKeyListener,而不是设置微调器的 OnClickListener。

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;
        }
    }
};

【讨论】:

  • 显示的错误消息是“不要在 AdapterView 上调用 setOnClickListener。您可能想要使用 setOnItemClickListener。”。但这不适合我的目的。
【解决方案3】:

如果这是您所要求的,这是选择项目时的功能。如需更多帮助,您需要发布代码。否则,我们不知道你在做什么

spinner.setOnItemSelectedListener(new OnItemSelectedListener()

【讨论】:

  • 不,如果计数为 0,我想避免显示微调器项目。我必须检查用户何时单击文本框,如微调器位置显示的视图
猜你喜欢
  • 2011-12-09
  • 2014-07-04
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多