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

时间:2018-09-17 07:40:02

标签: java android android-intent

我想从编辑文本中获取用户名,并将其显示在TextView id-textView2中的第二个活动中。在输入名称后按Enter键,然后单击“开始”按钮,它将转到第二个活动,但不会显示文本。我尝试在startActivity()方法内执行其他操作,例如onEditorAction,在按Enter键后它可以工作,但是此代码不起作用

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

活动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>

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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效果。

答案 2 :(得分:1)

似乎您正在后台线程中设置TextView的文本。

不能在后台线程中更改UI。

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

查看以下内容:How do we use runOnUiThread in Android?

答案 3 :(得分:0)

我将在这里回答最明显的问题。似乎也正在完成许多代码工作。

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

从30级开始,您必须而且我对此还不够强调,您仍然必须将其转换为EditText。实际上,从本质上讲,您必须处理所有事情。 Java不喜欢未经茎秆而不是豆类(种子)进行结构传播。所以,请最后一件事:

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

在这种组合中每次都有效!