基础 Activity 所有人 Activity

Base Activity For All Activity

我需要将一些敏感数据(例如 JOSN TOKEN)存储到本地存储中。我的应用程序将有多个活动,我想检查每个 activity 的令牌有效性,我不想 copy/paste 所有活动的相同逻辑。无论如何,我是否可以拥有类似基础 activity 的东西,它具有逻辑和所有其他活动继承自它?

目前我所有的活动都是这样的...

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

我只是在寻找一种易于编写一次的逻辑,并让所有活动重新使用它。

是的,您可以创建一个继承自 class AppCompatActivity.

的基础 class
[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);
    }
}

并使其他活动从 BaseActivity 扩展,例如:

[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);

    }
}

更新

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

如果你想为你的所有活动添加菜单,你可以在 BaseActivity 中添加你的菜单, 请参考以下代码:

1.create 您的菜单 (mymenu.xml) 在您的 Resources 文件夹 menu

<?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如下:

   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;
            }
        }
    }