Я хочу получить имя пользователя из текста редактирования и отобразить его во втором действии в TextView id-textView2. Когда я нажимаю клавишу ввода после ввода имени и нажимаю кнопку запуска, он переходит ко второму действию, но текст не отображается. Я попытался выполнить другие действия, такие как startActivity(), внутри метода onEditorAction, он работает после нажатия клавиши ввода, но этот код не работает
String name = nameText.getText().toString();
Intent p1 = new Intent(MainActivity.this, qPage1.class);
p1.putExtra("user_name",name);
Это потому, что я дважды заявлял о намерении, внутри onEditorAction() и внутри метода starQuizz в действии A. Я сделал это из-за проблем с областью действия.
Деятельность А
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.view.KeyEvent;
import android.widget.TextView.OnEditorActionListener;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText nameText = findViewById(R.id.nameText);
nameText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView nameText, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND || event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
String name = nameText.getText().toString();
Intent p1 = new Intent(MainActivity.this, qPage1.class);
p1.putExtra("user_name",name);
handled = true;
}
return handled;
}
});
}
//OnClick of a Start button
public void startQuizz(View view){
Intent p1 = new Intent(this, qPage1.class);
startActivity(p1);
}
}
Действие XML-макет
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/beautifulcolorgradientsbackgrounds091eternalconstance"
tools:context = ".MainActivity">
<EditText
android:id = "@+id/nameText"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "181dp"
android:width = "300dp"
android:hint = "@string/name_input"
android:inputType = "text"
android:imeOptions = "actionSend"
android:imeActionId = "10"/>
<Button
android:id = "@+id/start_button"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentBottom = "true"
android:layout_centerHorizontal = "true"
android:layout_marginBottom = "182dp"
android:onClick = "startQuizz"
android:text = "START" />
<TextView
android:id = "@+id/textView"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "45dp"
android:fontFamily = "@font/changa_one"
android:text = "Are you up for the challenge?"
android:textAlignment = "center"
android:textAllCaps = "false"
android:textSize = "30sp" />
</RelativeLayout>
Мероприятие 2
package com.guesstasif.guesswhat;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.view.View;
import android.widget.TextView;
public class qPage1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_q_page1);
final ProgressBar p1progress = findViewById(R.id.pg1progressBar);
Runnable r = new Runnable() {
@Override
public void run() {
int progressStatus = 0;
while (progressStatus<200){
p1progress.incrementProgressBy(1);
android.os.SystemClock.sleep(50);
progressStatus++;
}
RadioButton q1radiobutton3 = findViewById(R.id.q1radioButton3);
RadioButton q2radiobutton1 = findViewById(R.id.q2radioButton1);
Intent p2 = new Intent(qPage1.this, qPage2.class);
//name==============================================================
String name = getIntent().getStringExtra("user_name");
TextView textView2= findViewById(R.id.textView2);
textView2.setText(name);
//==================================================================
if (q1radiobutton3.isChecked() && q2radiobutton1.isChecked())
{
p2.putExtra("intVariableName", 2);
}
else if (q1radiobutton3.isChecked() || q2radiobutton1.isChecked())
{
p2.putExtra("intVariableName", 1);
}
startActivity(p2);
}
};
Thread progressThread =new Thread(r);
progressThread.start();
}
}
Макет xml действия 2
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".qPage1">
<TextView
android:id = "@+id/q1textView"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "20dp"
android:text = "Q1.What is the name of the 7th planet of ou Solar system?"
android:textAlignment = "center"
android:textSize = "24sp" />
<RadioGroup
android:id = "@+id/q1radioGroup"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_below = "@+id/q1textView"
android:layout_centerHorizontal = "true"
android:orientation = "horizontal">
<RadioButton
android:id = "@+id/q1radioButton1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Jupiter" />
<RadioButton
android:id = "@+id/q1radioButton2"
android:layout_width = "84dp"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Saturn" />
<RadioButton
android:id = "@+id/q1radioButton3"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Uranus" />
<RadioButton
android:id = "@+id/q1radioButton4"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Neptune" />
</RadioGroup>
//second Question//
<TextView
android:id = "@+id/q2textView"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentStart = "true"
android:layout_alignParentTop = "true"
android:layout_marginTop = "173dp"
android:text = "Q2.What is the name of the largest tree in the world?"
android:textAlignment = "center"
android:textSize = "24sp" />
<RadioGroup
android:id = "@+id/q2radioGroup"
android:layout_width = "match_parent"
android:layout_height = "100dp"
android:layout_alignParentStart = "true"
android:layout_below = "@+id/q2textView">
<RadioButton
android:id = "@+id/q2radioButton1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "General Sherman" />
<RadioButton
android:id = "@+id/q2radioButton2"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Sequoia sempervirens" />
<RadioButton
android:id = "@+id/q2radioButton3"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:text = "Centurion" />
<RadioButton
android:id = "@+id/q2radioButton4"
android:layout_width = "wrap_content"
android:layout_height = "35dp"
android:layout_weight = "1"
android:text = "Coast redwood" />
</RadioGroup>
<ProgressBar
android:id = "@+id/pg1progressBar"
style = "?android:attr/progressBarStyleHorizontal"
android:layout_width = "300dp"
android:layout_height = "wrap_content"
android:layout_alignParentBottom = "true"
android:layout_centerHorizontal = "true"
android:layout_marginBottom = "33dp"
android:max = "200" />
<TextView
android:id = "@+id/scoreView"
android:layout_width = "170dp"
android:layout_height = "41dp"
android:layout_alignParentBottom = "true"
android:layout_centerHorizontal = "true"
android:layout_marginBottom = "89dp" />
<TextView
android:id = "@+id/textView2"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "137dp"
android:textAlignment = "center" />
</RelativeLayout>




Посмотрите на метод startQuizz - похоже, вы не устанавливаете имя как дополнение к намерению!
Вы должны использовать одну функцию, которая запускает следующее действие как в действии редактора, так и в прослушивателе нажатия кнопки.
Причина в том, что вы запускаете новый Intent здесь:
public void startQuizz(View view){
Intent p1 = new Intent(this, qPage1.class);
startActivity(p1);
}
Которая не передает строку и просто запускает новый Intent-Activity.
Также здесь:
Intent p1 = new Intent(MainActivity.this, qPage1.class);
p1.putExtra("user_name",name);
Вы пропустили запуск Intent так:
Intent p1 = new Intent(MainActivity.this, qPage1.class);
p1.putExtra("user_name",name);
startActivity(p1);
И в методе викторины запускаем еще один Intent:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
И, наконец, во втором Activity:
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("user_name");
Кроме того, вы использовали Thread вместо runOnUIThread();, и это могло вызвать некоторые эффекты пользовательского интерфейса.
Итак, мой ответ помогает, плюс он получает строку, когда пользователь вводит строку и отправляет ее на другой Activity. Кроме того, как я объяснил, вы на самом деле не отправляли-принимали данные в Activities.
он не работает, как только я нажимаю клавишу ввода после ввода имени, он переходит ко второму действию (что должно), не дожидаясь нажатия кнопки, но, по крайней мере, теперь я знаю, где проблема с отправкой данные спасибо.
Вы можете запустить Activity просто после текста, полученного от TextView и отправленного Intent, вызвав переход к другому методу Activity или используя только startActivity после этих кодов.
это сработало, вторая проблема заключалась в том, что я менял пользовательский интерфейс внутри потока во втором действии.
Конечно, это был Thread, он должен быть runOnUIThread();, а этот запускается в пользовательском интерфейсе. Но я ответил на главный вопрос, так что тебе должно быть хорошо.
Кажется, вы устанавливаете текст TextView в фоновом потоке.
Пользовательский интерфейс нельзя изменить в фоновом потоке.
Попробуйте обернуть часть setText() в runOnUiThread().
Проверьте это: Как мы используем runOnUiThread в Android?
Я отвечу здесь на самый очевидный вопрос. Кажется, здесь тоже много работы над кодом.
EditText edittext = (EditText) findViewById(R.id.something);
Вы должны, и я не могу не подчеркнуть это достаточно, начиная с уровня 30, тем не менее, вы должны преобразовать его как EditText. Фактически, вам, по сути, нужно все. Java не любит структурное размножение без передачи стебля, а не бобов (семян). Итак, пожалуйста, еще кое-что:
String string = edittext.getText().toString()
Это работает каждый раз в этой комбинации!
я хочу, чтобы пользователь вводил свое имя, нажимал клавишу ввода, а затем, когда он нажимал кнопку запуска, запускалось второе действие (qPage1).
Intent p1 = new Intent(MainActivity.this, qPage1.class); p1.putExtra("user_name",name); startActivity(p1);, если я использую этот код, как вы упомянули, дойдет ли он до второго действия до нажатия кнопки запуска?