【问题标题】:How do I display text from an EditText?如何显示来自 EditText 的文本?
【发布时间】:2012-01-23 04:29:30
【问题描述】:

好的,我正在使用代码:

EditText editText = (EditText) findViewById(R.id.editText1);
String value = editText.getText().toString();

从 EditText 中获取文本,但是如何让它与 TextView 一起显示?另外,如果TextView在不同的Activity,代码会有什么变化?

像这样:

好吧,我试过这样做:

    EditText input = (EditText) findViewById(R.id.editText1);
    String thing = input.getText().toString();

    TextView display = (TextView) findViewById(R.id.textView1);
    String text = display.getText().toString();

    text.setText(thing);

但我在这一行收到错误“方法 setText(String) 未定义为 String 类型”:

text.setText(thing);

【问题讨论】:

  • 每次用户更改文本时都更新布局不是一个聪明的主意...在键入时可以很快触发文本更改,尤其是在删除带有退格键的字符时。当用户准备好更新布局时,最好有一个更新按钮。

标签: java android textview android-edittext


【解决方案1】:

你可以例如安装文本更改监听器

参见例如here for how to add it to the edit text。而不是渲染你会做textField.setText(text);

【讨论】:

    【解决方案2】:

    为此,您需要从编辑视图中获取文本并设置文本视图: 这是使用预定义的 getter 和 setter 的小菜一碟。

    您需要像对 EditText 所做的那样膨胀文本视图,然后使用 .setText 方法

    如果文本视图在一个新的活动中,您需要发送意图中的信息,例如:

    startActivity(new Intent(AndroidActivity.this, Activity2.class).putExtra("user", user.getText().toString()));
    

    然后在您的新活动中可以将其检索为

    String s = getIntent().getStringExtra("user")
    

    【讨论】:

      【解决方案3】:

      如何让它与 TextView 一起显示?

      这里的代码将使用 inputEditText 在您的示例中使用)每当在键盘上按下 enter 键 时(我看到您在对另一个答案的评论中要求这样做):

          // get reference to the TextView
          final TextView display = (TextView) findViewById(R.id.textView1);
      
          // get reference to EditText and set listener to update TextView
          final EditText input = (EditText) findViewById(R.id.editText1);
          input.setOnKeyListener(new OnKeyListener() {
              @Override
              public boolean onKey(View v, int keyCode, KeyEvent event) {
                  if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                          (keyCode == KeyEvent.KEYCODE_ENTER)) {
                        display.setText(input.getText());
                        return true;
                      }
                      return false;
              }
          });
      

      上面的代码在单个 Activity 中。

      另外,如果 TextView 在不同的 Activity 中,代码会如何变化?

      如果 display(您的示例中的 TextView)在另一个 Activity 中,那么更新它的一种快速方法是存储 input 的值strong>(您的示例中的 EditText)作为 SharedPreference 并让 display Activity 的 onResume 读取值:

      // Activity with display
      public class DisplayActivity extends Activity {
          private TextView display;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
      
              // get reference to the TextView
              display = (TextView) findViewById(R.id.textView1);
          }
      
          public void onResume() {
              super.onResume();
              String inputsValue = getSharedPreferences("myprefs", 0)
                      .getString("input", "" /** Default value*/);
      
              display.setText(inputsValue);
          }
      }
      
      // Activity with input
      public class InputActivity extends Activity {
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
      
              // get reference to EditText and store in SharedPreference
              final EditText input = (EditText) findViewById(R.id.editText1);
              input.setOnKeyListener(new OnKeyListener() {
                  @Override
                  public boolean onKey(View v, int keyCode, KeyEvent event) {
                      if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                              (keyCode == KeyEvent.KEYCODE_ENTER)) {
                            getSharedPreferences("myprefs", 0).edit()
                                .putString("input", input.getText().toString()).commit();
                            return true;
                      }
                      return false;
                  }
              });
          }
      }
      

      您应该将我的代码中的所有硬编码字符串文字替换为代码常量

      【讨论】:

        【解决方案4】:

        问题一的答案:

        使用TextView.setText(CharSequence text, TextView.BufferType type) 使您的文本视图显示您想要的文本。

        【讨论】:

          【解决方案5】:

          为了解决这个特定的错误,请使用

          display.setText(thing);
          

          目前您正在将字符串设置为另一个字符串,并且没有像 settext 这样的函数可用于字符串。 此外,如果您希望这种情况即时发生(当用户输入文本时更新 textview),请使用文本观察器。

          【讨论】:

          • 那么当用户按下回车/回车时,我怎样才能让它更新?
          【解决方案6】:

          为edittext定义一个事件处理程序,每当其文本更改时提取它并执行display.setText()

          希望对你有帮助

          【讨论】:

            【解决方案7】:

            您可以使用此代码在 EditText 中创建显示文本

            <EditText
                android:text="Your name"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="15dp"
                android:layout_width="380dp"
                android:layout_height="wrap_content"/>
            

            结果 EditText

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-10-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多