I'm trying to do 3 intents to start a new activity,
however I find that I always get an error.
I'm putting my code onto main.java
code:
public class Main extends Activity {
Button service;
Button gallery;
Button contact;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
service = (Button)findViewById(R.id.Services);
service.setOnClickListener(new View.OnClickListener() {
});
gallery = (Button)findViewById(R.id.Gallery);
gallery.setOnClickListener(new View.OnClickListener() {
});
contact = (Button)findViewById(R.id.Contact);
contact.setOnClickListener(new View.OnClickListener() {
});
public void onClick (View v) {
// Inflate the menu; this adds items to the action bar if it is present.
Intent intent = new Intent (Main.this, servicesActivity.class);
startActivity(intent);
}
public void onClick1 (View v) {
Intent intent1 = new Intent (Main.this, galleryActivity.class);
startActivity(intent1);
}
public void onClick2 (View v) {
Intent intent2 = new Intent (Main.this, contactActivity.class);
startActivity(intent2);
}
}
}
I have tried different ways and even putting brackets in different places. also I have been searching on the internet for weeks and found nothing that work with more than 1.
I'm getting errors on OnClick and new View.OnClickListener().
I have got one working which is why I tried the same code with 3 buttons.
Basically I have 3 buttons on main activity.xml. All I want to do is:
>'button1 >goes> activity1'
>'button2 >goes> activity2'
>'button3 >goes> activity3'
Please give me any hints or tips as I'm new to Android dev.
public class Main extends Activity {
Button service;
Button gallery;
Button contact;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
service = (Button)findViewById(R.id.Services);
service.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent (Main.this, servicesActivity.class);
startActivity(intent);
}
});
gallery = (Button)findViewById(R.id.Gallery);
gallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent1 = new Intent (Main.this, galleryActivity.class);
startActivity(intent1);
}
});
contact = (Button)findViewById(R.id.Contact);
contact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent2 = new Intent (Main.this, contactActivity.class);
startActivity(intent2);
}
});
}
You can do all of them inside the same listener
. Set all the listeners
this way
service.setOnClickListener(this);
gallery.setOnClickListener(this);
then use one function and check the id
of the View
that was clicked
public void onClick2 (View v) {
Intent intent = new Intent();
switch (v.getId()) // get the id of the Button clicked
{
case (R.id.Services):
intent = new Intent(Main.this, servicesActivity.class);
break;
case (R.id.Gallery):
intent = new Intent(Main.this, galleryActivity.class);
break;
...
}
startActivity(intent);
You can actually clean it up even more to not repeat variables with something like this
public void onClick(View v)
{
Intent intent = new Intent(); // create an Intent
String act = null; // name for Activity to start with Intent
String shield = "com.your.package."; // set package name
switch (v.getId()) // get the id of the Button clicked
{
case (R.id.Services):
act = package + "Services"; // if Services button clicked use Services as the activity
break;
case (R.id.Gallery):
act = package + "GalleryActivity";
break;
...
}
try
{
intent = new Intent(Main.this, Class.forName(act)); // create your Intent by changing your String act to a class name
startActivity(intent); // start the Intent as normal
}
catch (ClassNotFoundException e){ // don't forget to catch invalid class names
e.printsStackTrace();
}
And as dymeh pointed out, make sure your Activity
implements OnClickListener
This could probably be cleaned up a little more and may look more difficult but I use something like this in a custom menu and other places and it works nicely. It cuts down on separate functions and creating separate Intents
. If you have to add something later or want to reuse the code it makes it a little easier, IMHO