OnEditorActionListener () работает, но не может получить текст из EditText

Я хочу получить имя пользователя из текста редактирования и отобразить его во втором действии в 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>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
132
4

Ответы 4

Посмотрите на метод 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();, и это могло вызвать некоторые эффекты пользовательского интерфейса.

я хочу, чтобы пользователь вводил свое имя, нажимал клавишу ввода, а затем, когда он нажимал кнопку запуска, запускалось второе действие (qPage1). Intent p1 = new Intent(MainActivity.this, qPage1.class); p1.putExtra("user_name",name); startActivity(p1);, если я использую этот код, как вы упомянули, дойдет ли он до второго действия до нажатия кнопки запуска?

Tasif 17.09.2018 10:06

Итак, мой ответ помогает, плюс он получает строку, когда пользователь вводит строку и отправляет ее на другой Activity. Кроме того, как я объяснил, вы на самом деле не отправляли-принимали данные в Activities.

ʍѳђઽ૯ท 17.09.2018 10:11

он не работает, как только я нажимаю клавишу ввода после ввода имени, он переходит ко второму действию (что должно), не дожидаясь нажатия кнопки, но, по крайней мере, теперь я знаю, где проблема с отправкой данные спасибо.

Tasif 17.09.2018 10:30

Вы можете запустить Activity просто после текста, полученного от TextView и отправленного Intent, вызвав переход к другому методу Activity или используя только startActivity после этих кодов.

ʍѳђઽ૯ท 17.09.2018 10:42

это сработало, вторая проблема заключалась в том, что я менял пользовательский интерфейс внутри потока во втором действии.

Tasif 18.09.2018 00:52

Конечно, это был Thread, он должен быть runOnUIThread();, а этот запускается в пользовательском интерфейсе. Но я ответил на главный вопрос, так что тебе должно быть хорошо.

ʍѳђઽ૯ท 18.09.2018 07:21

Кажется, вы устанавливаете текст TextView в фоновом потоке.

Пользовательский интерфейс нельзя изменить в фоновом потоке.

Попробуйте обернуть часть setText() в runOnUiThread().

Проверьте это: Как мы используем runOnUiThread в Android?

Я отвечу здесь на самый очевидный вопрос. Кажется, здесь тоже много работы над кодом.

EditText edittext = (EditText) findViewById(R.id.something);

Вы должны, и я не могу не подчеркнуть это достаточно, начиная с уровня 30, тем не менее, вы должны преобразовать его как EditText. Фактически, вам, по сути, нужно все. Java не любит структурное размножение без передачи стебля, а не бобов (семян). Итак, пожалуйста, еще кое-что:

String string = edittext.getText().toString()

Это работает каждый раз в этой комбинации!

Другие вопросы по теме

Похожие вопросы

Регулярное выражение для соответствия одной букве от A до Z
Внедрение объекта конфигурации в служебный компонент во время модульного тестирования в Spring Boot
Как правильно преобразовать новую дату (0L) в LocalDate (1970-01-01)?
Как войти и зарегистрироваться для 2 пользователей отдельно в базе данных firebase? Используя счетчик, чтобы выбрать тип пользователя
Запускать веб-хук, когда задание фонового поиска завершается на Splunk Enterorice
Возникла проблема после повторного развертывания веб-службы apache-cxf на сервере tomee
Ошибка Java. Конструктор по умолчанию не может обрабатывать исключение типа SQLException, созданное неявным суперконструктором. Необходимо определить явный конструктор
Android как вызвать адаптер после выполнения цикла for
ServerSocketChannel против ServerSocket Java
Активировать профиль, который находится в другом pom при построении из родительского pom проекта