Tasif
Tasif

Reputation: 85

OnEditorActionListener() working but cant get the text from EditText

I want to get the username from edit text and display it in the second Activity in TextView id-textView2. When I press enter after writing the name and click start button it goes to the second activity but the text is not being displayed . I tried executing other actions like startActivity() inside onEditorAction method it works after i press enter, but this code is not working

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

Is it because i declared two times intent, inside onEditorAction() and inside starQuizz method in Activity A. i did this because of scope issues.

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

Activity A xml layout

<?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>

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

Activity 2 xml layout

<?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>

Upvotes: 2

Views: 291

Answers (4)

thexiv
thexiv

Reputation: 25

I'll answer the most obvious question here. It seems there's a lot of code work being done, here also.

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

You must, and I cannot stress this enough, as of Level 30, still, you have to cast it as an EditText. In fact, you have to with everything, essentially. Java doesn't like structural propagating without being handed the stalk, not the beans (seeds). So, please one last thing:

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

That works every time in this combination!

Upvotes: 0

ʍѳђઽ૯ท
ʍѳђઽ૯ท

Reputation: 16976

The reason is you start a new Intent in here:

public void startQuizz(View view){
        Intent p1 = new Intent(this, qPage1.class);
        startActivity(p1);
    }

Which does not pass the string and just starts a new Intent-Activity.

Also here:

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

You missed to start Intent so:

Intent p1 = new Intent(MainActivity.this, qPage1.class);
                        p1.putExtra("user_name",name);
                        startActivity(p1);

And in the quiz method, start another Intent:

Intent intent = new Intent(this, SecondActivity.class);
    startActivity(intent);

And finally, in the second Activity:

Bundle bundle = getIntent().getExtras();
String name = bundle.getString("user_name");

Also, you were using Thread instead of runOnUIThread(); and that might cause some UI effects.

Upvotes: 2

tykimseoul
tykimseoul

Reputation: 108

It seems you are setting text of a TextView in a background thread.

The UI cannot be altered in a background thread.

Try wrapping the setText() part in runOnUiThread().

Check this out: How do we use runOnUiThread in Android?

Upvotes: 1

npace
npace

Reputation: 4258

Look at the startQuizz method - seems like you are not setting the name as an extra to the intent!

You should use a single function that starts the next activity both in the editor action and the button click listener.

Upvotes: 1

Related Questions