Получить текст из EditText в строку для другого действия

Я искал и не нашел пути. Решения, которые я нашел, не работают, или я не знаю, как их реализовать.

Моя основная деятельность

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" />

В макете "ractivity" у меня есть этот 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.

Я хотел бы знать, как решить это.

Заранее спасибо. Если вам нужны дополнительные данные, скажите мне.

5 ответов

Решение

Это выглядит хорошо, с небольшой модификацией.

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()Передайте созданный Намерение, подобное этому:

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 с идентификатором textView.

Использование

 startActivity(intent); 

вместо

 startResultActivity(null);

в вашем Button onClick

Попробуйте этот код:

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


            }

Изменил 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();

внутри onClick представления bVerify, поэтому он будет читать текущий текст, когда клиент нажмет на кнопку

+ Изменить startResultActivity(null); в startActivity(intent);, А затем в другой деятельности, где вам нужно использовать эту строку:

Intent intent = getIntent();
String getExtra = intent.getStringExtra("EXTRA_MESSAGE");
TextView.setText(getExtra);
Другие вопросы по тегам