Raghav Kumar
Raghav Kumar

Reputation: 489

How to obtain and pass the value of a button

I want to know how I can obtain the value of a button and then use it on another activity to display content accordingly.

Example:

I have 3 buttons Image1, Image2 & Image3 on my MainActivity.

Now based on what button the user clicks (Image1, Image2 & Image3), a corresponding image is displayed on a new activity.

I know how to create these buttons, the new activity and also how to display an image on the new activity. How do I display the image based on what button the user clicks?

Upvotes: 0

Views: 3679

Answers (7)

Benyomin Walters
Benyomin Walters

Reputation: 133

I know this is and old question, but there is another way, which I prefer, because you can use the same default method for all buttons.

First add a tag to each button.

 <Button
    android:id="@+id/imageOneButton"
    android:tag="1"
    android:onClick="chooseImage" />

Then use this tag number to alter the behavior of your method.

 public void chooseImage(View view) {

    int imageNumber = Integer.parseInt(view.getTag().toString());

    // I'll just send this tag number to a toast, but you can send it in your intent
    // as an "Extra"

    Toast.makeText(this, view.getTag().toString(), Toast.LENGTH_SHORT).show();

}

Upvotes: 0

Raghunandan
Raghunandan

Reputation: 133560

Your class should implement OnClickListener and override onClick()

Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(new OnClickListener(this));
button2.setOnClickListener(new OnClickListener(this));
button3.setOnClickListener(new OnClickListener(this));


 @Override
 public void onClick(View v){

switch(v.getId()) //get the id which is an int
    {
     case R.id.button1 : //if its button1 that is clicked
         Intent i= new Intent("com.example.secondActivity");
         i.puExtra("key",value);
         startActivity(i);
        // use intents to pass information to secondActivity and display the image there
      break;
      case R.id.button2 :
         Intent i= new Intent("com.example.secondActivity");
         startActivity(i)
         //use intents to pass information to secondActivity and display the image there
      break;
      case R.id.button3 :
          Intent i= new Intent("com.example.secondActivityy");
          startActivity(i)
          //use intents to pass information to secondActivity and display the image there
      break;
    }
 }

To pass values using intents

On Button click

         Intent i= new Intent("com.example.secondActivity");
         i.puExtra("key",value);
         startActivity(i);

In Second Activity retrieve it as below

         Bundle extras = getIntent().getExtras();
        if(extras!=null)
        {
         int values= extras.getInt("key");
        }

Upvotes: 5

Homam
Homam

Reputation: 5076

Add this in onCreate of your activity that contains the 3 buttons

        Button image1 = (Button) findViewById(R.id.image1);
        image1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), DisplayImagActivity.class)
                .putExtra("ImageName", "Image1"));
            }
        });

        Button image2 = (Button) findViewById(R.id.image2);
        image2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), DisplayImagActivity.class)
                .putExtra("ImageName", "Image2"));
            }
        });

        Button image3 = (Button) findViewById(R.id.image3);
        image3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), DisplayImagActivity.class)
                .putExtra("ImageName", "Image3"));
            }
        });

Add this in onCreate of your activity where you will set the image:

        String imageName = getIntent().getStringExtra("ImageName");
        if(imageName.equals("Image1")) {
            //set image 1
        }
        else if(imageName.equals("Image2")) {
            //set image 2
        }
        else if(imageName.equals("Image3")) {
            //set image 3
        }

Upvotes: 1

Andrei Zhukouski
Andrei Zhukouski

Reputation: 3506

For example you have 3 Buttons and ImageView in Main layout:

Main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

<Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:id="@+id/btn1"
        android:text="button 1"
        />
<Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:id="@+id/btn2"
        android:text="button 2"
        />
<Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:id="@+id/btn3"
        android:text="button 3"
        />

<ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/iv"
        />

I your activity metod onClick handle events from three buttons. And we need to recognize that the button has been pressed.

MyActivity.java

public class MyActivity extends Activity implements View.OnClickListener {

Button btn1;
Button btn2;
Button btn3;
ImageView iv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn1 = (Button) findViewById(R.id.btn1);
    btn2 = (Button) findViewById(R.id.btn1);
    btn3 = (Button) findViewById(R.id.btn1);
    iv = (ImageView) findViewById(R.id.iv);
    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn2.setOnClickListener(this);
 }

@Override
public void onClick(View v) {
   switch (v.getId()){
       case R.id.btn1:
       {
           Toast toast = Toast.makeText(this, "onClickButton1", Toast.LENGTH_SHORT);
           toast.show();
           iv.setImageDrawable(R.drawable.my_image_1);
           break;
       }
       case R.id.btn2:
       {
           Toast toast = Toast.makeText(this, "onClickButton2", Toast.LENGTH_SHORT);
           toast.show();
           iv.setImageDrawable(R.drawable.my_image_2);
           break;
       }
       case R.id.btn3:
       {
           Toast toast = Toast.makeText(this, "onClickButton3", Toast.LENGTH_SHORT);
           toast.show();
           iv.setImageDrawable(R.drawable.my_image_3);
           break;
       }
   }
}

}

Where my_image_1, my_image_2, my_image_3 - images, from your Drawable folder. Hope its Help.

Upvotes: 1

Paresh Mayani
Paresh Mayani

Reputation: 128428

I have 3 buttons Image1, Image2 & Image3 on my MainActivity. Now based on what button the user clicks (Image1, Image2 & Image3), a corresponding image is displayed on a new activity.

=> As you already said yo know how to create buttons and initiate it.

Now you just need to assign OnClickListener to every buttons and then pass Image id or URL into the Intent by which you are calling new activity.

Check the code posted by @IceMAN above, now as I mentioned above, put ImageURL or Image ID into Intent by using putExtra() method.

For example:

 Intent intent= new Intent(CurrentClass.this, ImageActivity.class);
  intent.putExtra("ImageURL",strImageURL);
  startActivity(i);

Upvotes: 1

Siddharth Lele
Siddharth Lele

Reputation: 27748

Why not use a switch case to determine which button was clicked by the user and show the corresponding / relevant image in the next activity? For example:

First, make your Activity implement the OnClickListener. Then, in the onCreate() cast your Buttons and set their setOnClickListener

@Override
public void onCreate(Bundle savedInstanceState) {
    ....
    Button Image1 = (Button) findViewById(R.id.Image1);       
    Image1.setOnClickListener(this);
    .... // THE REST OF THE BUTTONS
}

I am assuming you are passing a Bundle in the Intent for starting the next Activity. Change that code to pass information that contains which button was pressed.

For example: Intent showPhoto = new Intent(CurrentActivity.this, YOUR_SECOND_ACTIVITY.class); showPhoto.putExtra("BUTTON_CLICKED", "IMAGE1"); startActivity(showPhoto);

@Override
public void onClick(View v) {
    // Perform action on click
    switch(v.getId()) {
    case R.id.Image1:
        // RUN THE CODE TO START THE NEXT ACTIVITY
        Intent showPhoto = new Intent(CurrentActivity.this, YOUR_SECOND_ACTIVITY.class);
        showPhoto.putExtra("BUTTON_CLICKED", "IMAGE1");
        startActivity(showPhoto);

        break;
    case R.id.Image2:
        // RUN THE CODE TO START THE NEXT ACTIVITY
        Intent showPhoto = new Intent(CurrentActivity.this, YOUR_SECOND_ACTIVITY.class);
        showPhoto.putExtra("BUTTON_CLICKED", "IMAGE2");
        startActivity(showPhoto);

        break;
    case R.id.Image3:
        // RUN THE CODE TO START THE NEXT ACTIVITY
        Intent showPhoto = new Intent(CurrentActivity.this, YOUR_SECOND_ACTIVITY.class);
        showPhoto.putExtra("BUTTON_CLICKED", "IMAGE3");
        startActivity(showPhoto);

        break;
    }

    }
}

Upvotes: 1

adrianp
adrianp

Reputation: 2551

You simply implement one ClickListener for each button, which will start the corresponding activity. See an example here.

Upvotes: 0

Related Questions