无法从 EditText 获取 Toast

Cannot get Toast from EditText

我在卡片视图中有一个多编辑文本字段,我想从中获取一个字符串并在 toast 中显示,然后再转到另一个 activity。当 运行 和 activity 时,我可以很好地填写文本,但是当我单击提交按钮时,没有任何反应。我做错了什么或者我在代码中遗漏了什么?

这是我的 XML 文件:

        <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        card_view:cardCornerRadius="4dp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="0dp">

        <EditText
            android:id="@+id/value1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/choice_hint1c"
            android:inputType="textMultiLine" />

    </android.support.v7.widget.CardView>

    <Button
        android:id="@+id/choiceButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/round_btn_shape"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_marginStart="125dp"
        android:text="@string/submit"
        android:textColor="#FFFFFF" />

Class 文件:

   import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class Choice extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choice);
addListenerOnButton();


    }

    public void addListenerOnButton() {

        Button submitButton = (Button) findViewById(R.id.choiceButton);
        final EditText editTextV1 = (EditText) findViewById(R.id.value1);
        final String valueOne = editTextV1.getText().toString();


        submitButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (valueOne.equals("")) {
                    //happens if first field is empty
                    Toast.makeText(
                            getApplicationContext(),
                            "First field is empty",
                            Toast.LENGTH_SHORT).show();

                } else {

                    //save selection

                    Toast.makeText(
                            getApplicationContext(),
                            valueOne,
                            Toast.LENGTH_SHORT).show();

                    //save response to SQLite

                    Intent intentSurvey = new Intent(Choice.this, MainActivity.class);
                    startActivity(intentSurvey);

                }

            }

        });


}
}

我不知道什么是 Choice.this 但 Toast 的第一个参数需要是 Context 例如:Toast.makeText(getContext(), "Your text for toast", Toast.LENGTH_SHORT).show();

你走在正确的轨道上。当断言来自 EditText 的字符串时,我更喜欢使用:

if(Strings.isNullOrEmpty(someStringHere)) {
    do this
}

这是从 espresso 库中使用的。使用

导入您的 class 文件
import android.support.test.espresso.core.deps.guava.base.Strings;

确保将 Espresso 添加到您的 build.gradle 文件中。

一个字符串可以为null,但不等于"",这就是我走上述路线的原因。我假设您的吐司显示的是 'null' 字符串。

如果这不起作用,我怀疑是因为您试图在 onClick 方法中通过 ID 查找视图。 onClick(事实上其他 'on' 方法)的 context 与您的 activity 不同。这就是为什么在敬酒时,你必须说 CLASSNAME.this,而不仅仅是 'this'.

尝试拉出您的编辑文本,并使其成为您 class 的私有成员。像以前一样按 id 查找编辑文本,但在 onClickListener 之上和之外进行。进入 onclick 方法后,您应该能够获取已有的文本值。

如果这些都不能解决您的问题,您将不得不 post 更多代码。

  1. 您错过了在 onCreate 方法中添加 addListenerOnButton()

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_choice);
    addListenerOnButton(); // add this
    }
    
  2. 检查EditText是否为空

     if(TextUtils.isEmpty(valueOne)) 
    
  3. String valueOne = editTextV1.getText().toString();移入onClick

首先是我在 onCreate 中没有看到 addListenerOnButton() 方法。提到了这个。

其次是在创建时使用 EditText 的初始值设置最终的 String valueOne。然后通过关闭匿名 class.

来保留此值

您需要在侦听器中获取文本字段的字符串版本。