mxmolins
mxmolins

Reputation: 289

Android - How to setText() of an item outside the present dialog

I have a button that calls a dialog. From that button i have 8 buttons: 1,2,3,4,5,6,7, and cancel. These buttons will be used to change the text of the button. The thing is that it doesn't do anything if i set the text inside the dialog.

buttonDefineHits = (Button) rowView.findViewById(R.id.button_define_hits);
        buttonDefineHits.setOnClickListener(new View.OnClickListener() {              
            @Override
            public void onClick(View v) {
                //Dialog 1-7 i x para definir los holes
                setDialogSetHits();

            }
        });

.

private void setDialogSetHits(){
    final Dialog dialogConfirmPlayers = new Dialog (activity);
    dialogConfirmPlayers.setCancelable(false); 
    dialogConfirmPlayers.setContentView(R.layout.dialog_set_hits);

    Button button1Hit = (Button) dialogConfirmPlayers.findViewById(R.id.button_1_hit);
    button1Hit.setOnClickListener(new View.OnClickListener() {            
        @Override
        public void onClick(View v) {
            //Dialog 1-7 i x para definir los holes
            buttonDefineHits.setText("1");
            dialogConfirmPlayers.cancel();
        }
    });
    dialogConfirmPlayers.show();
}

Upvotes: 0

Views: 446

Answers (2)

Aniruddha
Aniruddha

Reputation: 4487

Here is the working example, you need to modify it accordingly

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:id="@+id/tv1"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/buttonMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tv1"
        android:layout_below="@+id/tv1"
        android:layout_marginTop="44dp"
        android:text="Button" />

</RelativeLayout>

dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OK" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel" />

</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    TextView t;
    Button bMain;
    Dialog d;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         t = (TextView) findViewById(R.id.tv1);
         bMain = (Button) findViewById(R.id.buttonMain);




        bMain.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 d = new Dialog(MainActivity.this);

                    d.setTitle("Hello Android..!");

                    d.setContentView(R.layout.dialog_view);

                    Button bOK = (Button) d.findViewById(R.id.button1);
                    Button bCancel = (Button) d.findViewById(R.id.button2);
                d.show();

                bOK.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        t.setText("OK");
                        bMain.setText("Changed the text");
                        d.cancel();
                    }
                });

            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

Upvotes: 0

Parth Kapoor
Parth Kapoor

Reputation: 1504

You can set the Text of a Button that is defined in a activity from the dialogBox. I guess Aniruddha is wrong in his comment. I mean yes the user cannot have a "Iteration" with the Activity's UI elements as long as a Dialog is shown over it, But programatically you can change the Text property of the Button in your activity. To confirm, this is what I tried:

  1. Created a Dialog on the click event of ImageView.
  2. From the Dialog Button's Click listener, I changed the Text of a editText in the Activity.

Similarly, you should also be able to set the text of the button from the dialog button's click listener.

I think you should remove the 7 buttons from your dialog, and for testing purpose just have one button on it. Then handle the click event on this button and try n set the Activity button's Text. This should work like charm.

Then later you can integrate your 7-buttons.

Upvotes: 1

Related Questions