我找到了这段Java代码,可以创建一个通用的方法,从一个活动启动任何活动。
public void gotoActivity(Class activityClassReference)
{
Intent i = new Intent(this,activityClassReference);
startActivity(i);
}
我该如何将那段代码转换为适用于Xamarin-Android的C#代码?
先行致谢。
我找到了这段Java代码,可以创建一个通用的方法,从一个活动启动任何活动。
public void gotoActivity(Class activityClassReference)
{
Intent i = new Intent(this,activityClassReference);
startActivity(i);
}
我该如何将那段代码转换为适用于Xamarin-Android的C#代码?
先行致谢。
你可以写:
public void GoToActivity(Type myActivity)
{
StartActivity(myActivity);
}
并且像这样调用:
GoToActivity(typeof(ActivityType));
或者只写:
StartActivity(typeof(ActivityType));
void btnEntrar_Click(object sender,EventArgs e)
{
var NxtAct= new Intent(this, typeof(Perguntas2));
StartActivity(NxtAct);
}
在我的代码中,我做了这个操作
<queries>
元素声明要访问活动的应用程序包名称,因为Android 11引入了与软件包可见性相关的更改changes related to package visibility。否则,您将会收到ActivityNotFoundException
错误提示。<manifest>
....
<queries>
<package android:name="com.companyname.yourOtherApp" />
</queries>
</manifest>
PackageManager pm = Android.App.Application.Context.PackageManager;
然后你可以查找一个启动Activity的意图:
Intent intent = pm.GetLaunchIntentForPackage(packageName);
- 如果这个值是null,你可以编写逻辑将用户带到PlayStore安装该应用程序。 PackageManager pm = Android.App.Application.Context.PackageManager;
Intent intent = pm.GetLaunchIntentForPackage(packageName);
if (intent != null)
{
intent.PutExtra(Android.Content.Intent.ExtraPackageName, "com.companyname.callingActivityName");
intent.SetFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intent);
}
else
{
Android.App.Application.Context.StartActivity(new Intent(Intent.ActionView).SetData(Android.Net.Uri.Parse("https://play.google.com/store/apps/details?id=" + packageName)));
}
intent.PutExtra
只是一个添加一些消息到其他活动的示例。您可以在另一侧使用以下内容获取:OnCreate
:
var text = Intent.GetStringExtra(Android.Content.Intent.ExtraPackageName);
如果您想在OnResume
中使用它,以便在重定向后应用程序可以接收消息(在这种情况下,不会触发OnCreate),您必须首先覆盖另一个方法。它将允许您获取更新的值: protected override void OnNewIntent(Android.Content.Intent intent)
{
base.OnNewIntent(intent);
// Check not required, implement your own logic. This checks if a message was passed.
if (intent.Extras != null)
Intent = intent; // Intent.GetStringExtra now has the new value
}
public void StartAuthenticatedActivity(System.Type activityType)
{
var intent = new Intent(this, activityType);
StartActivity(intent);
}
public void StartAuthenticatedActivity<TActivity>() where TActivity: Activity
{
StartAuthenticatedActivity(typeof(TActivity));
}
TActivity : YourBaseActivity
,其中TActivity
是您创建的基本活动。我知道这个问题可能已经过时了,但我有一个不同的方法,使用一个外部类来对任何现有的活动进行通用调用操作:
public static class GeneralFunctions
{
public static void changeView(Activity _callerActivity, Type activityType)
{
ContextWrapper cW = new ContextWrapper(_callerActivity);
cW.StartActivity(intent);
}
}
Button redirectButton = FindViewById<Button>(Resource.Id.RedirectButton);
redirectButton.Click += delegate
{
GeneralFunctions.changeView(this, typeof(LoginView));
};
可能对你们中的一些人有所帮助