无法从EditText获取Toast

时间:2017-06-01 01:10:37

标签: java xml android-studio android-edittext android-toast

我在卡片视图中有一个多编辑文本字段我希望从一个字符串中显示并在toast中显示,然后再转到另一个活动。我可以在运行活动时填写文本,但是当我单击提交按钮时没有任何反应。我做错了什么或者我在代码中缺少什么?

这是我的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" />

班级档案:

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

                }

            }

        });


}
}

4 个答案:

答案 0 :(得分:3)

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

    @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();

  4. 中移动onClick

答案 1 :(得分:1)

我不知道什么是object,但Toast的第一个参数需要Choice.this示例:Context

答案 2 :(得分:1)

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

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

这是从浓缩咖啡库中使用的。使用

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

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

字符串可以为null,但不等于“”,这就是我追求上述路线的原因。我假设你的吐司正在显示一个'null'字符串。

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

尝试提取您的编辑文本,并使其成为您班级的私人成员。像以前一样按ID查找编辑文本,但在onClickListener之上和之外执行。进入onclick方法后,您应该能够获得已经存在的文本值。

如果这些都没有解决您的问题,那么您将不得不发布更多代码。

答案 3 :(得分:1)

首先,我没有在onCreate中看到方法addListenerOnButton()。提到了这一点。

其次是在create上设置最终的String valueOne,其中包含EditText的初始值。然后通过关闭匿名类来保持该值。

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