setOnClickListener 方法无法获取 EditText 值



环境: Android Studio 3.1.1

public class AddQuestionActivity extends AppCompatActivity
{
    public Button add_question;
    public EditText question_EditText;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_question);
        add_question = findViewById(R.id.addquestion);
        question_EditText = findViewById(R.id.question_add);
        final String question = question_EditText.getText().toString();
        Log.d("finds","question1:"+question);
        add_question.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Log.d("finds","question:"+question);
                if (question.length()==0)
                {
                    new AlertDialog.Builder(AddQuestionActivity.this)
                        .setTitle(R.string.add_error)
                        .setMessage(R.string.add_blank)
                        .setPositiveButton(R.string.ok, null)
                        .setNeutralButton(R.string.cancel, null)
                        .show();
                }
            }
        });
    }
}

问题的值始终为空。

终于,我找到了另一种方式在 *.xml 中添加

android:onClick="add_question"

在 *.java 使用

public void add_question(View v)
    {
}

它有效。

我不明白为什么 setOnClickListener 方法不起作用?

final String question = question_EditText.getText().toString();

我应该将此代码更改为 setOnClickListener 方法吗?

删除这个

final String question = question_EditText.getText().toString();

它仅在初始活动时获得值 1 次。

String question = question_EditText.getText().toString();移动到 onClick 方法。

尝试此操作以在单击按钮时在编辑文本中获取当前字符串。

        
        add_question.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String question = question_EditText.getText().toString();
                Log.d("finds","question:"+question);
                if (question.length()==0)
                {
                    new AlertDialog.Builder(AddQuestionActivity.this)
                        .setTitle(R.string.add_error)
                        .setMessage(R.string.add_blank)
                        .setPositiveButton(R.string.ok, null)
                        .setNeutralButton(R.string.cancel, null)
                        .show();
                }
            }
        });

final String question = question_EditText.getText().toString(); 

这行代码位于 OnCreate(( 方法中,因此仅在加载活动时调用一次。将文本添加到 EditText 后,单击按钮,但字符串"问题"仅包含初始值;不是更新的。因此,您应该在将文本添加到 EditText.或按钮的 onClick 侦听器后调用该代码。

试试这个:

您使用

final String question = question_EditText.getText().toString();

更改为

String question = uestion_EditText.getText().toString(); //gets you the question  of edit text

把这一行放在 onClick(( 中

喜欢这个:

     add_question.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            String question = question_EditText.getText().toString();
            Log.d("finds","question:"+question);
            if (question.length()==0)
            {
                new AlertDialog.Builder(AddQuestionActivity.this)
                    .setTitle(R.string.add_error)
                    .setMessage(R.string.add_blank)
                    .setPositiveButton(R.string.ok, null)
                    .setNeutralButton(R.string.cancel, null)
                    .show();
            }
        }
    });
}
 }

那里删除以下行并将其添加到 onclick 方法中。

final String question = question_EditText.getText().toString();
Log.d("finds","question1:"+question);

这里,是onCreate()方法的完整代码。

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_question);
    add_question = findViewById(R.id.addquestion);
    question_EditText = findViewById(R.id.question_add);
    add_question.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            final String question = question_EditText.getText().toString();
            Log.d("finds","question1:"+question);
            if (question.length()==0)
            {
                new AlertDialog.Builder(AddQuestionActivity.this)
                        .setTitle(R.string.add_error)
                        .setMessage(R.string.add_blank)
                        .setPositiveButton(R.string.ok, null)
                        .setNeutralButton(R.string.cancel, null)
                        .show();
            }
        }
    });
}
String question = question_EditText.getText().toString();

把这行放在onClick()里面

试试这个!

注意:您正在尝试在点击时获取编辑文本值,它将始终在其中!

final String question = question_EditText.getText().toString();

 add_question.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    final String question = question_EditText.getText().toString();
                    Log.d("finds","question:"+question);
                    if (question.length()==0)
                    {
                        new AlertDialog.Builder(AddQuestionActivity.this)
                            .setTitle(R.string.add_error)
                            .setMessage(R.string.add_blank)
                            .setPositiveButton(R.string.ok, null)
                            .setNeutralButton(R.string.cancel, null)
                            .show();
                    }
                }
            });

最新更新