Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Same button on multiple activities

right i have a sign in button located exactly in the same place on every activity and i have bout 20 activities at the moment but will rise a lot higher soon, and i don't really want to be copying and pasting the same code in to each activity, so I'm looking for a simple, efficient solution to handle the onClick event which will work globally throughout the app.

For example, if User A clicks on the sign in button on Activity 1 and signs in, it will show that he is signed in on Activity 2 and 3 and so on.. until they log out.

The sign in button has the same ID throughout the whole application which is "@+id/signIn"

Would it be easier to call a single function at the beginning of each activity? I thought that wouldn't be every effective use of processing power etc?!

Any suggestions and/or guidance would be much appreciated. Thank you :)

like image 334
Tom O Avatar asked May 01 '11 14:05

Tom O


People also ask

How do I make a button go to another activity?

Using an OnClickListener Inside your Activity instance's onCreate() method you need to first find your Button by it's id using findViewById() and then set an OnClickListener for your button and implement the onClick() method so that it starts your new Activity .

Can you use a same XML layout for 2 different activities?

Yes you can! I had multiple activities inflate the same layout but they save different shared preferences. @Override protected void onCreate(Bundle savedInstanceState) { super. onCreate(savedInstanceState); setContentView(R.

Do more than one activity at the same time?

Human multitasking is the concept that one can split their attention on more than one task or activity at the same time, such as speaking on the phone while driving a car. Multitasking can result in time wasted due to human context switching and becoming prone to errors due to insufficient attention.


1 Answers

You can't avoid implementing that listener in all of your activities in either ways. But you can do it in a bit more organized way:

You could write a custom header layout for your application (/res/layout/header.xml), in which you have the "Sign In" button with a click listener set (pointing to an onSignInClicked method):

android:onClick="onSignInClicked"

Then you include this header to each activity layout:

<include android:id="@+id/header" layout="@layout/header" />

You could also create an interface which contains an onSignInClicked method declaration, and by all your activities implementing that interface you force them to define the onSignInClicked method's body.

What you actually do there can also be wrapped into

  • a static method inside a globally accessible class, or
  • a well-parametrized method inside your Application extension class.

so in all of your activities this method can be:

public static void onSignInClicked(View view)
{
    // static method with call with reference to the current activity
    SignInHelper.doSignIn(this);
}

or

public static void onSignInClicked(View view)
{
    // global method in your `Application` extension
    // with reference to the current activity
    ((MyApplication)getApplicationContext()).doSignIn(this);
}

If you choose the second way, don't forget to update your androidManifes.xml by setting the name attribute of your application tag:

<application android:name=".MyApplication" [...]
like image 55
rekaszeru Avatar answered Nov 03 '22 02:11

rekaszeru