【问题标题】:setOnClickListener method can't get EditText valuesetOnClickListener 方法无法获取 EditText 值
【发布时间】:2018-04-12 04:00:15
【问题描述】:

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

【问题讨论】:

  • 你为什么不把问题字符串放在 On-Click 里面!
  • 当您的活动打开并且您想要编辑文本的最新值时,它作为问题字符串为空,获取编辑文本的值,因此您应该检查 onClick 内部的长度并获取 editText 的文本内容在 OnClick 内
  • 回复:Rahul Chandrabhan:我是 android 新手,有时会犯愚蠢的错误
  • 这很酷的兄弟,每个人都......甚至我.​​.....哈哈

标签: android oncreate


【解决方案1】:

删除这个

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

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

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

当你点击按钮时,试试这个来获取edittext中的当前字符串。

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

【讨论】:

    【解决方案2】:
    final String question = question_EditText.getText().toString(); 
    

    这行代码在你的 OnCreate() 方法中,所以它只在 Activity 加载时被调用一次。 将文本添加到 EditText 后,单击按钮,但字符串“问题”仅包含初始值;不是更新的。 因此,您应该在将文本添加到您的 Button 的 EditText.or onClick 侦听器之后调用该代码。

    【讨论】:

      【解决方案3】:

      试试这个:

      你使用

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

      【讨论】:

        【解决方案4】:

        从那里删除以下行并将其添加到 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();
                    }
                }
            });
        }
        

        【讨论】:

          【解决方案5】:
          String question = question_EditText.getText().toString();
          

          将此行放入onClick()

          【讨论】:

            【解决方案6】:

            试试这个!

            注意:您正在尝试在 onclick 之外获取 edittext 值,它将始终在其中!

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

            【讨论】:

              猜你喜欢
              • 2017-01-03
              • 1970-01-01
              • 2017-11-01
              • 2012-10-28
              • 1970-01-01
              • 2021-08-05
              • 1970-01-01
              • 1970-01-01
              • 2021-05-24
              相关资源
              最近更新 更多