OnEditorActionListener()工作,但无法从EditText获取文本

问题描述 投票:1回答:3

我想从编辑文本中获取用户名并将其显示在TextView id-textView2中的第二个Activity中。当我在写完名称后按Enter键并单击开始按钮时,它会转到第二个活动,但文本未显示。我尝试执行其他操作,如startActivity()内部的onEditorAction方法,它按下回车后工作,但此代码不起作用

String name = nameText.getText().toString();
Intent p1 = new Intent(MainActivity.this, qPage1.class);
p1.putExtra("user_name",name);

是因为我在活动A中的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);
    }
}

活动A 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();
    }
}

活动2 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"
    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>
java android android-intent
3个回答
1
投票

看看startQuizz方法 - 似乎你没有将名称设置为意图的额外内容!

您应该使用单个函数在编辑器操作和按钮单击侦听器中启动下一个活动。


1
投票

看来你正在后台线程中设置TextView的文本。

无法在后台线程中更改UI。

尝试将setText()部分包裹在runOnUiThread()中。

看看这个:How do we use runOnUiThread in Android?


1
投票

原因是你在这里开始一个新的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();,这可能会导致一些UI效果。

© www.soinside.com 2019 - 2024. All rights reserved.