Получить текст из 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);