Android EditText-用户完成编辑后显示Toast

时间:2018-11-27 20:03:32

标签: android android-edittext android-toast

我的android代码中有一个EditText,我想在用户停止编辑字段后显示Toast消息。

    final EditText kurz = findViewById(R.id.kurz);

        kurz.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable s) { Toast.makeText(context, getString(R.string.saved_settings), Toast.LENGTH_SHORT).show();}

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) {
                if(s.length() != 0) {

String waketime = String.valueOf(kurz.getText());

                    getSharedPreferences("MY_PREFERENCE", MODE_PRIVATE).edit().putString("xxxx", waketime).apply();

                }

                else { kurz.setText("1");

                }

            }
        });

首先,我尝试将Toast添加到onTextChanged-从逻辑上讲,这表明每次用户在字段中进行任何更改时Toast。

然后,如您在我的代码中看到的,我将Toast放在afterTextChanged中,但没有任何变化。用户每次键入任何内容都会显示该消息,因此该消息显示了很多次。

在用户完成对字段的编辑后,我只想显示一次Toast(焦点停留在此,因为这是唯一的字段)。

例如,在编辑后有5秒钟的暂停,这意味着用户可能已完成编辑并仅在这种情况下显示烤面包

1 个答案:

答案 0 :(得分:3)

我建议您在处理多个EditTexts时不要遵循这种等待的概念。但是,由于您明确声明只有一个人,所以我会说您的方法很好。

无论如何要在5秒钟后显示Toast(也许2-3秒比较合适),您基本上可以执行以下操作:

val handler = Handler()
val runnable = Runnable {
    Toast.makeText(this@MainActivity, "Woop Woop", Toast.LENGTH_LONG).show()
}
kurz.addTextChangedListener(object: TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
        handler.removeCallbacks(runnable)
        handler.postDelayed(runnable, 5000)
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

})

我在这里做的是:

  • 创建一个Handler和一个Runnable
  • afterTextChanged 5秒内postDelay Runnable

由于afterTextChanged可以被多次调用,因此必须确保取消已经存在的postDelayed Runnables。为此,您可以在removeCallbacks上调用Handler

(希望Kotlin代码不是问题)

编辑: HandlerRunnable在Java中如下所示:

Handler handler = new Handler();
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        Toast.makeText(MainActivity.this, "Woop Woop", Toast.LENGTH_LONG).show();
    }
};