Home > front end >  Base Activity For All Activity
Base Activity For All Activity

Time:01-15

I need to store some sensitive data such as JOSN TOKEN into Local Storage. My App will have Multiple Activities, I would like to check the Token Validity on every single activity, I dont want to copy/paste the same logic on all Activities. is there anyway I can have something like a base activity which has the logic and all other activities inherit from it?

Currently all my activities look like this...

    public class MainActivity : AppCompatActivity
    {
    }
    public class RegisterActivity : AppCompatActivity
    {
    }
    public class ContentActivity : AppCompatActivity
    {
    }

I am just looking for a easy to write logic once and have all activities re-use it.

CodePudding user response:

Yes, you can create a base class which inherits from class AppCompatActivity.

[Activity(Label = "BaseActivity")]
public class BaseActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your application here

        Preferences.Set("my_key", "123456");
    }

    protected override void OnResume()
    {
        base.OnResume();

        var myValue = Preferences.Get("my_key", "default_value");

        System.Diagnostics.Debug.WriteLine("-------------> value is:  " myValue);
    }
}

And make other activities extend from the BaseActivity ,for example:

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : BaseActivity
{

    Button button;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

    }
}

update

so if I have a Menu, which I need to share on all activities, is there any concept for base layout as well?

If you want to add menu for your all activities, you can just add your menus in BaseActivity , please refer to the following code:

1.create your menu (mymenu.xml)in folder menu in your Resources folder

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@ id/item1"
        android:title="Item 1"/>
  <item android:id="@ id/item2"
        android:title="Item 2"/>
  <item android:id="@ id/item3"
        android:title="Item 3"/>
</menu>

2.modify BaseActivity as follows:

   public class BaseActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here

            Preferences.Set("my_key", "123456");
        }

        public override bool OnCreateOptionsMenu(IMenu menu)
        {

            MenuInflater.Inflate(Resource.Menu.mymenu, menu);

            return true;
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Resource.Id.item1:
                    //Do stuff for item1

                    System.Diagnostics.Debug.WriteLine("--------> select item1");
                    return true;
                case Resource.Id.item2:
                    //Do stuff for item2
                    System.Diagnostics.Debug.WriteLine("--------> select item2");
                    return true;
                case Resource.Id.item3:
                    //Do stuff for item3

                    System.Diagnostics.Debug.WriteLine("--------> select item3");
                    return true;
                default:
                    return false;
            }
        }
    }
  •  Tags:  
  • Related