EditText不存储键入的第一个值,然后在添加新值时存储上一个值

时间:2017-12-20 07:48:24

标签: java android xml

以下是XML和Java代码段:

    <EditText android:id="@+id/paper_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Select Paper"
    android:maxLength="1"
    android:inputType="phone"
    android:onClick="getPaper"/>

    public void getPaper(View view){
    EditText paperText = findViewById(R.id.paper_text);
    paper = paperText.getText().toString();

}

因此,如果按下提示,键盘会显示,我输入的数字为&#34; 1&#34;。 (我只需要整数,所以我认为我将类型设置为&#34;数字&#34;或&#34;手机&#34;,但所有类型都会出现问题。)当我按下返回时关闭键盘,数字不会存储在变量&#34; paper&#34;中。 (我用调试器检查)。但是,如果我再次打开键盘,请按退格键并键入任何数字,然后存储EditText的上一个实例,在本例中为1。

总而言之,如果我一个接一个地输入以下数字,这就是存储的内容:

输入:2,3,3,1,2

商店:空白,2,3,3,1

3 个答案:

答案 0 :(得分:0)

您可以使用addTextChangedListener代替onClick()

试试这个

    EditText paperText = findViewById(R.id.paper_text);
    paperText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String paper = paperText.getText().toString().trim();
            Toast.makeText(MainActivity.this, "" + paper, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

android:onClick="getPaper"

中删除EditText
<EditText android:id="@+id/paper_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Select Paper"
    android:maxLength="1"
    android:inputType="phone"
/>

答案 1 :(得分:0)

通过查看您提供的代码段,您似乎已在编辑文本中设置了onclicklistner。因此,当您第一次点击编辑文本时它是空白时,您的第一个数字为空白,然后存储剩余的数字。 的 FYI 您在onclick属性中提到的方法将View作为输入参数参数,这与设置onclick或onclicklistner的视图相同。在你的情况下它是edittext,所以不需要编写findViewById(),因为这会降低你的应用程序性能。

答案 2 :(得分:0)

正如其他人所指出的那样,不要使用android:onClick。想想这个事件何时被触发。只有当用户点击/点击EditText时才会被触发(在键盘上输入不是点击事件)。

当您订阅onClick侦听器时,方法处理程序仅在您单击时被调用(在您的情况下,使用后退按钮关闭键盘,然后再次点击EditText以开始键入)。 / p>

另一方面,如果您订阅TextChangeListener,则每次EditText保留的文字发生变更时都会收到回调。

希望让事情更容易理解。确保始终阅读javadocs方法或至少Android文档。

我的猜测是,您希望用户键入,然后按一个按钮对键入的文本执行某些操作。因此,只需在布局中添加ButtonEditText,然后订阅按钮的onClick即可根据EditText的值执行操作。