Metalloid66
Metalloid66

Reputation: 119

Get certain intents

So lets say i have 4 buttons , and each button contains an intent which navigates to an activity.They all navigate to a single same activity . When i click the first button i want that new activity to show "Hi" , When i click the second button i want it to show "Bye" and so on . How do i do that ? Here is a simple code to start with

public class Intentt extends Activity {
Button b1,b2,b3,b4;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_intentt);
    b1 = (Button)findViewById(R.id.button2);
    b2 = (Button)findViewById(R.id.button3);
    b3 = (Button)findViewById(R.id.button4);
    b4 = (Button)findViewById(R.id.button5);
    b1.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i  = new Intent(Intentt.this,MainActivity.class);
            startActivity(i);
        }
    });
    b2.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i  = new Intent(Intentt.this,MainActivity.class);
            startActivity(i);
        }
    });
    b3.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i  = new Intent(Intentt.this,MainActivity.class);
            startActivity(i);
        }
    });
    b4.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i  = new Intent(Intentt.this,MainActivity.class);
            startActivity(i);
        }
    });
}

Upvotes: 2

Views: 81

Answers (4)

Toumash
Toumash

Reputation: 1087

Just pass some data through intent extras, or intent extra Bundle:

Intent i=new Intent(context,MainActivity.class);
i.putExtra(id, 453);
context.startActivity(i);

Example:

Button b1, b2, b3, b4;
Context context = this;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_intentt);
    b1 = (Button) findViewById(R.id.button2);
    b2 = (Button) findViewById(R.id.button3);
    b3 = (Button) findViewById(R.id.button4);
    b4 = (Button) findViewById(R.id.button5);

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, MainActivity.class);
            i.putExtra(MainActivity.ID_ACTION, MainActivity.ACTION_1);
            startActivity(i);
        }
    });
    b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, MainActivity.class);
            i.putExtra(MainActivity.ID_ACTION, MainActivity.ACTION_2);
            startActivity(i);
        }
    });
}

And then in that activity you can switch on that values getting them like that:

String id = intent.getStringExtra("id");
int id = intent.getIntExtra("id",-1);

and then use the if-elseif-else or switch statement(s) to change the actions based on the passed action, so you can display your messages

To properly recieve them you need to set activity's launchMode to "standard" because of this bug in AndroidManifest.xml and create

public static final int ACTION_1 = 1;
public static final int ACTION_2 = 2;
public static final int ACTION_NULL = -1;
public static final String ID_ACTION = "action_id";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int id = getIntent().getIntExtra(ID_ACTION, -1);

    if (id == ACTION_NULL) {
        Log.d("TAG", "id is null");
        Toast.makeText(MainActivity.this, "id is null!", Toast.LENGTH_SHORT).show();
    } else if (id == ACTION_1) {
        Log.i("TAG", "ALLOHA! from button 1");
         Toast.makeText(MainActivity.this, "Aloha from button 1!", Toast.LENGTH_LONG).show();
    } else if (id == ACTION_2) {
        Log.i("TAG", "Hello from button 2");
         Toast.makeText(MainActivity.thi,"Hello from button 2!", Toast.LENGTH_LONG).show();
    }
}

Upvotes: 3

Tomislav
Tomislav

Reputation: 3211

Do it like this:

    public class Intentt extends Activity implements View.OnClickListener {
Button b1,b2,b3,b4;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_intentt);
    b1 = (Button)findViewById(R.id.button2);
    b2 = (Button)findViewById(R.id.button3);
    b3 = (Button)findViewById(R.id.button4);
    b4 = (Button)findViewById(R.id.button5);
    b1.setOnClickListener(this);
    b2.setOnClickListener(this);
    b3.setOnClickListener(this);
    b4.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {


            switch (v.getId()) {
                case R.id.button2:

                    Intent i  = new Intent(Intentt.this,MainActivity.class);
                    i.putExtra('"STRING_I_NEED"', "Hi");
                    startActivity(i)

                    break;
                case R.id.button3:
                    Intent i  = new Intent(Intentt.this,MainActivity.class);
                    i.putExtra('"STRING_I_NEED"', "Bye");
                    startActivity(i)

                    break;

                case R.id.button4:

                    break;
                    .
                    .
                    .
            }
    }
}

After that in your mainActivity retrieve string that you sent with:

Bundle extras = getIntent().getExtras();
String s = extras.getString("STRING_I_NEED");

Upvotes: 1

Eldhose M Babu
Eldhose M Babu

Reputation: 14530

Re write the button click listener as follows :

b1.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i  = new Intent(Intentt.this,MainActivity.class);
        i.putExtra("Data","Hi");
        startActivity(i);
    }
});
b2.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i  = new Intent(Intentt.this,MainActivity.class);
        i.putExtra("Data","Hello");
        startActivity(i);
    }
});
b3.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i  = new Intent(Intentt.this,MainActivity.class);
        i.putExtra("Data","Bye");
        startActivity(i);
    }
});
b4.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i  = new Intent(Intentt.this,MainActivity.class);
        i.putExtra("Data","See you");
        startActivity(i);
    }
});

In your MainActivity class onCreate Method, you can access the passed data by :

String passedData = getIntent().getStringExtra("Data");

you can use this passedData to display on screen.

Upvotes: 1

JARP
JARP

Reputation: 1249

In each intent you could pass parameterts

Intent i=new Intent(context,SendMessage.class);
i.putExtra("KEY_MESSAGE", "Hola amigo");

In the other activity

 Intent i = getIntent();
 String message = i.getStringExtra("KEY_MESSAGE")
 Toast.make(this,message,Toast.LENGTH_SHORT).show()

Upvotes: 1

Related Questions