我尝试制作一个关于用户输入的应用程序姓氏,名字和地址。我试图做的是让用户输入EditText
并将其显示在TextView
上,但我无法显示以下文本,因为运行时出错。它的作用是,如果我单击提交按钮,它将显示用户输入,但它在TextView
上的内容是" android.support.v7.widget.TextView .... etc"。
我刚刚开始Android编程,一切都让人困惑。请告诉我解决这个问题的最基本的东西。
public class MainActivity extends AppCompatActivity {
EditText fname, lname;
TextView display;
Button result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fname = (EditText) findViewById(R.id.etFirstname);
lname = (EditText) findViewById(R.id.etLastname);
display = (TextView) findViewById(R.id.tvResult);
result = (Button) findViewById(R.id.btnSubmit);
result.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
display.setText("Name: " + lname + ", " + fname);
}
});
}
}
答案 0 :(得分:7)
您已经定义了正确的变量,但您必须获得编辑文本的值。所以用这个替换你的代码。
result.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
display.setText("Name: " + lname.getText().toString() + ", " + fname.getText().toString());
}
});
答案 1 :(得分:3)
如果要在EditText
中显示文本,则需要从TextView
小部件中提取文字。现在,您只需将对象打印到setText
。
试试这个。
display.setText("Name: " + lname.getText().toString() + ", " + fname.getText().toString());
答案 2 :(得分:3)
您未获取EditText
的文字。使用 lname.getText()。toString()获取EditText
的文本,然后将此文本设置为TextView
试试这段代码:
result.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
display.setText("Name: " + lname.getText().toString() + ", " + fname.getText().toString());
}
});
答案 3 :(得分:1)
lname和fname是EditText,你不能用字符串连接2 EditText。
你需要做
display.setText("Name: " + lname.getText() + ", " + fname.getText());
答案 4 :(得分:1)
我的建议是模块化您的代码。
首先创建一个bean类,其中包含fName和lName作为两个字符串字段,并覆盖toString()方法,如下所示。
class Person {
private String fName;
private String lName;
// Getter and Setter methods, which you can write.
public String toString() {
return "Name: " + lname + ", " + fname;
}
}
在activty中创建bean对象并将侦听器放在两个edittext上。
Person person = new Person();
fname.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
//set bean object field fName here.
person.setFname(s.toString());
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
与其他edittext字段相同。
lname.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
//set bean object field lName here.
person.setLName(s.toString());
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
然后在onclick监听器内部简单地返回person对象toString()方法。
result.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
display.setText(person.toString());
}
});
答案 5 :(得分:0)
建立在Hugo Houyez的回答
display.setText(String.format("Name: %1$s, %2$s",lname.getText().toString(),fname.getText().toString);
现在您可以看到要显示为第一个值的完整字符串。
每%s值,您可以添加字符串值。 %1 $ s值表示第一个字符串将显示在此处%2 $ s将显示第二个字符串,依此类推。