【问题标题】:Get text from EditText into string to another activity从 EditText 获取文本到另一个活动的字符串
【发布时间】:2016-11-24 16:22:04
【问题描述】:

我一直在寻找,但我找不到路。我找到的解决方案不起作用或我不知道如何实施。

我的主要活动

public class MainActivity extends AppCompatActivity {



@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText txtDescription = (EditText) findViewById(R.id.nameE);
        final String nameE2 = txtDescription.getText().toString();

        Button bVerify = (Button) findViewById(R.id.verifyB);
        bVerify.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                /** Called when the user clicks the Next button */
                Log.d("EditText", nameE2);
                Intent intent = new Intent(MainActivity.this, ResultActivity.class);
                intent.putExtra(EXTRA_MESSAGE, nameE2);
                startResultActivity(null);
            }
        });
    }

    public void startResultActivity(View view){
        Intent sra = new Intent(this, ResultActivity.class);
        startActivity(sra);

    }
    }

这已经在我的代码中,是我找到的两种解决方案,但我不知道如何使用它们:

 EditText txtDescription = (EditText) findViewById(R.id.nameE);
    String nameE2 = txtDescription.getText().toString();

&

Log.d("EditText", nameE2);
        Intent intent = new Intent(MainActivity.this, ResultActivity.class);
        intent.putExtra(EXTRA_MESSAGE, nameE2);

在activity_main中,我有这个EditText和这个按钮:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:text="Name"
    android:ems="10"
    android:id="@+id/nameE"
    android:layout_below="@+id/NameTxt"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:editable="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/verifyB"
    android:layout_alignParentStart="true"
    android:text="@string/verifyB"
    android:layout_alignParentEnd="true"
    android:layout_below="@+id/nameE"
    android:layout_alignParentLeft="true" />

在“反应性”布局中,我有这个 PlainText。在这个我想添加来自其他活动/布局的 EditText 输入。

<TextView

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello  + nameE2 + . Are you sure you want to accept these terms?"
    android:id="@+id/textView"
    android:textSize="20dp"
    android:textColor="@color/abc_input_method_navigation_guard" />

"nameE2" 必须是 EditText 的字符串。

我很想知道如何解决它。

提前致谢。如果您需要更多数据,请告诉我。

【问题讨论】:

  • startResultActivity(null);空???
  • 为什么要创建这个方法 startResultActivity(null); ??!!
  • @AkashDubey 因为如果我输入: startResultActivity(intent);它将它标记为红色并将鼠标放在框上说: MainActivity 中的 startResultActivity (android.view.View) 不能应用于 (android.content.Intent)
  • 我解决了这个问题谢谢,这是错误的一部分,我认为字符串传递给了 ResultActivity,但我不知道如何将该字符串放入布局中的纯文本中。 &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello + nameE2 + . Are you sure you want to accept these terms?" android:id="@+id/textView" android:textSize="20dp" android:textColor="@color/abc_input_method_navigation_guard" /&gt; 不行

标签: java android android-activity android-edittext gettext


【解决方案1】:

这看起来不错,稍作修改。

bVerify.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        /** Called when the user clicks the Next button */
        Log.d("EditText", nameE2);
        Intent intent = new Intent(MainActivity.this, ResultActivity.class);
        intent.putExtra(EXTRA_MESSAGE, nameE2);
        startResultActivity(null);
    }
});

这里不是将null传递给startResultActivity(),而是传递类似这样的创建Intent:

bVerify.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        final String nameE2 = txtDescription.getText().toString();
        /** Called when the user clicks the Next button */
        Log.d("EditText", nameE2);
        Intent intent = new Intent(MainActivity.this, ResultActivity.class);
        intent.putExtra(EXTRA_MESSAGE, nameE2);
        startResultActivity(intent);
    }
});

startResultActivity() 方法必须如下所示:

public void startResultActivity(Intent intent){

    startActivity(intent);

}

编辑: 正如我所提到的,您不能直接在布局文件中使用变量。

您必须动态设置它。您可以在 ResultActivity 的 onCreate() 方法中执行此操作。它必须看起来像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ractivity); // your second layout file

    TextView textView = (TextView) findViewById(R.id.textView); 
    String stringResult = getIntent().getStringExtra(EXTRA_MESSAGE);
    String textViewText = "Hello "+ stringResult +". Are you sure you want to accept these terms?";
    textView.setText(textViewText);

}

如果在您的第​​二个布局文件中有一个带有 textView id 的 Textview,这将起作用。

【讨论】:

  • 谢谢!就是这样。我必须改变意图,而且我必须改变 startResultActivity 方法。现在我认为字符串传递给 ResultActivity,但我不知道如何将该字符串放入布局中的纯文本中。 &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello + nameE2 + . Are you sure you want to accept these terms?" android:id="@+id/textView" android:textSize="20dp" android:textColor="@color/abc_input_method_navigation_guard" /&gt; 不行
  • 从你的布局文件中你不能从你的活动中引用变量。如果要在新 Activity 中显示传递的字符串,则必须动态设置它。在您的 ResultActivity 中添加以下代码 onCreate() 方法:TextView textView = findViewById(R.id.textView); String stringResult = getIntent().getStringExtra(EXTRA_MESSAGE); textView.setText(stringResult);
  • 那行得通,我不得不输入TextView textView = (TextView) findViewById(R.id.textView); 因为没有(TextView) 我收到了警告。现在我只需要知道如何将字符串放在布局上,因为它不会让我参考stringResult。抱歉知道这么少。谢谢,你帮了我很多。 &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello + stringResult + . Are you sure you want to accept these terms?" android:id="@+id/textView" /&gt;
  • 完美!谢谢你的帮助。现在我理解了代码。 ^^ 见!
【解决方案2】:

使用

 startActivity(intent); 

而不是

 startResultActivity(null);

在你的Button onClick

【讨论】:

  • 因为如果我输入:startResultActivity(intent);它将它标记为红色并将鼠标放在框上说: MainActivity 中的 startResultActivity (android.view.View) 不能应用于 (android.content.Intent)
  • 无需输入startResultActivity(intent)。只需放 startActivity(intent);
  • 谢谢,这是错误的一部分,我认为字符串传递给了 ResultActivity,但我不知道如何在布局中将该字符串放入纯文本中。 &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello + nameE2 + . Are you sure you want to accept these terms?" android:id="@+id/textView" android:textSize="20dp" android:textColor="@color/abc_input_method_navigation_guard" /&gt; 不行
【解决方案3】:

试试这个代码:

 public class MainActivity extends AppCompatActivity {

        @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                EditText txtDescription = (EditText) findViewById(R.id.nameE);
                final String nameE2 = txtDescription.getText().toString();

                Button bVerify = (Button) findViewById(R.id.verifyB);
                bVerify.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        /** Called when the user clicks the Next button */
                        Log.d("EditText", nameE2);
                        Intent intent = new Intent(MainActivity.this, ResultActivity.class);
                        intent.putExtra(EXTRA_MESSAGE, nameE2);
                        startActivity(intent);
                    }
                });
            }


            }

【讨论】:

    【解决方案4】:

    将 onClickListener 更改为

    bVerify.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                /** Called when the user clicks the Next button */
                final String nameE2 = txtDescription.getText().toString();
                Log.d("EditText", nameE2);
                Intent intent = new Intent(MainActivity.this, ResultActivity.class);
                intent.putExtra(EXTRA_MESSAGE, nameE2);
                startActivity(intent);
            }
    });
    

    当它没有任何文本时,您会在开始时收到文本,所以请移动

    final String nameE2 = txtDescription.getText().toString();
    

    在 bVerify 视图的 onClick 内部,因此当客户端单击按钮时它将读取当前文本

    【讨论】:

    • 谢谢,这是错误的一部分,我认为字符串传递给了 ResultActivity,但我不知道如何在布局中将该字符串放入纯文本中。 &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello + nameE2 + . Are you sure you want to accept these terms?" android:id="@+id/textView" android:textSize="20dp" android:textColor="@color/abc_input_method_navigation_guard" /&gt; 不行
    【解决方案5】:

    startResultActivity(null); 更改为startActivity(intent);。 然后在需要使用该字符串的其他活动中:

    Intent intent = getIntent();
    String getExtra = intent.getStringExtra("EXTRA_MESSAGE");
    TextView.setText(getExtra);
    

    【讨论】:

    • 我做到了。 public class ResultActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ractivity); Intent intent = getIntent(); String getExtra = intent.getStringExtra("EXTRA_MESSAGE"); TextView.setText(getExtra); } } setText 收到警告:“无法从静态内容中引用”我该如何解决?谢谢,很有帮助
    • “反应性”中 TextView 的 id 是 textView,对吗?尝试将 TextView.setText(getExtra) 更改为 textView.setText(getExtra) 。如果您甚至没有投射它,请执行以下操作:TextView textView = (TextView) findViewById(R.id.textView);
    • 我已经投票了,等我获得 15 声望。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多