Android setOnClickListener方法可以';无法获取编辑文本值

Android setOnClickListener方法可以';无法获取编辑文本值,android,oncreate,Android,Oncreate,环境: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.onCr

环境: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方法吗?

试试这个

注意:如果您试图将edittext值从onclick中取出,它将始终在onclick中

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

去掉这个

final String question = question_EditText.getText().toString();
在初始活动时,它仅获得1次值

Move
String question=question_EditText.getText().toString()编码到onClick方法中

final String question = question_EditText.getText().toString();
Log.d("finds","question1:"+question);
单击按钮时,尝试此操作以获取edittext中的当前字符串


添加_question.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
String question=question_EditText.getText().toString();
日志d(“发现”,“问题:+问题”);
if(question.length()=0)
{
新建AlertDialog.Builder(AddQuestionActivity.this)
.setTitle(R.string.add_错误)
.setMessage(R.string.add_blank)
.setPositiveButton(R.string.ok,null)
.setNeutralButton(R.string.cancel,null)
.show();
}
}
});
这行代码在OnCreate()方法中,因此在加载活动时只调用一次。
将文本添加到EditText后,单击按钮,但字符串“question”仅包含初始值;不是最新的。
所以,您应该在将文本添加到EditText.or按钮的onClick listener之后调用该代码

String question = question_EditText.getText().toString();
将这行放在
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();
            }
        }
    });
}

为什么不在点击时把问题串放进去呢!它是空的,因为当你的活动打开时,问题字符串获取编辑文本的值,你想要编辑文本的最新值,所以你应该检查onClick内的长度,并获取onClick内编辑文本的文本内容回答:Rahul Chandrabhan:我是android新手,有时会犯愚蠢的错误,每个人都有…甚至我…哈哈
@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();
            }
        }
    });
}