setOnClickListener 方法无法获取 EditText 值
setOnClickListener method can't get EditText value
环境: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 方法吗?
试试这个!
注意:您正试图在 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();
}
}
});
删除这个
final String question = question_EditText.getText().toString();
初始activity时只取值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();
}
}
});
final String question = question_EditText.getText().toString();
这行代码在您的 OnCreate() 方法中,因此它只在 Activity 加载时调用一次。
将文本添加到 EditText 后,单击按钮,但字符串 "question" 仅包含初始值;不是更新的。
因此,您应该在将文本添加到按钮的 EditText.or onClick 侦听器后调用该代码。
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();
}
}
});
}
环境: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 方法吗?
试试这个!
注意:您正试图在 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();
}
}
});
删除这个
final String question = question_EditText.getText().toString();
初始activity时只取值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();
}
}
});
final String question = question_EditText.getText().toString();
这行代码在您的 OnCreate() 方法中,因此它只在 Activity 加载时调用一次。 将文本添加到 EditText 后,单击按钮,但字符串 "question" 仅包含初始值;不是更新的。 因此,您应该在将文本添加到按钮的 EditText.or onClick 侦听器后调用该代码。
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();
}
}
});
}