基础 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;
}
}
}
我需要将一些敏感数据(例如 JOSN TOKEN)存储到本地存储中。我的应用程序将有多个活动,我想检查每个 activity 的令牌有效性,我不想 copy/paste 所有活动的相同逻辑。无论如何,我是否可以拥有类似基础 activity 的东西,它具有逻辑和所有其他活动继承自它?
目前我所有的活动都是这样的...
public class MainActivity : AppCompatActivity
{
}
public class RegisterActivity : AppCompatActivity
{
}
public class ContentActivity : AppCompatActivity
{
}
我只是在寻找一种易于编写一次的逻辑,并让所有活动重新使用它。
是的,您可以创建一个继承自 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);
}
}
并使其他活动从 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;
}
}
}