【问题标题】:Basic Android: How to display string of user input? [duplicate]Basic Android:如何显示用户输入的字符串? [复制]
【发布时间】:2016-09-20 07:59:26
【问题描述】:

我试图制作一个关于用户输入姓氏、名字和地址的应用程序。我试图做的是让用户输入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);
                    }
                });
        }

    }

【问题讨论】:

  • 只需调用 display.setText("Name: " + lname.getText() + ", " + fname.getText());

标签: java android


【解决方案1】:

您已经定义了正确的变量,但您必须获取编辑文本所具有的值。所以用这个替换你的代码。

 result.setOnClickListener(new View.OnClickListener()
 {
    @Override
    public void onClick(View v)
    {
         display.setText("Name: " + lname.getText().toString() + ", " + fname.getText().toString());
    }
  });

【讨论】:

    【解决方案2】:

    当您想在TextView 中显示文本时,您需要从EditText 小部件中获取文本。现在您只需将对象打印到setText

    试试这个。

    display.setText("Name: " + lname.getText().toString() + ", " + fname.getText().toString());
    

    【讨论】:

      【解决方案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());
          }
      });
      

      【讨论】:

        【解决方案4】:

        lname 和 fname 是 EditText,您不能将 2 EditText 与字符串连接。

        你需要做的

        display.setText("Name: " + lname.getText() + ", " + fname.getText());
        

        【讨论】:

        • 如果你调用函数toString(),那么你不连接2个EditText你连接2个字符串。 String toString() 它返回 String,所以正如我之前所说,你不能将 2 EditText 与 String 连接起来。
        • 我建议你试一试,看看会发生什么
        • 这是创建主题的原因,他尝试将字符串与 2 个编辑文本连接起来,但出现错误。
        【解决方案5】:

        我的建议是模块化你的代码。

        首先创建一个包含 fName 和 lName 作为两个字符串字段并覆盖 toString() 方法的 bean 类,如下所示。

        class Person {
            private String fName;
            private String lName;
        
            // Getter and Setter methods, which you can write.
        
            public String toString() {
                return "Name: " + lname + ", " + fname;
            }
        }
        

        创建 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) {}
               });
        

        其他编辑文本字段相同。

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

        【讨论】:

          【解决方案6】:

          以 Hugo Houyez 的回答为基础

          display.setText(String.format("Name: %1$s, %2$s",lname.getText().toString(),fname.getText().toString);
          

          现在您可以看到要显示为第一个值的完整字符串。

          您可以为每个 %s 值添加一个字符串值。 %1$s 值意味着第一个字符串将显示在这里 %2$s 将显示第二个字符串,依此类推。

          【讨论】:

            猜你喜欢
            • 2013-02-08
            • 1970-01-01
            • 1970-01-01
            • 2019-08-05
            • 1970-01-01
            • 2017-12-31
            • 2012-11-30
            • 2011-06-26
            • 2020-01-13
            相关资源
            最近更新 更多