android - (Xamarin - Android)从另一个类调用 Activity 类中的公共方法?
问题描述
我在 Xamarin 上开发了一个应用程序。我尝试在加载 webview 页面时隐藏图像。我尝试了不同的方法,例如调用公共函数或从另一个类访问 imageview。
我读了这个,但它不适用于 Xamarin。
所以我尝试了一些
[Activity(Label = "XamarinWebView", Theme = "@android:style/Theme.Black.NoTitleBar", MainLauncher = true)]
public class MainActivity : Activity
{
WebView app_view = null;
WebSettings app_web_settings = null;
WebChromeClient web_client;
MyWebViewClient my_web_client;
ImageView my_splash = null;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
app_view = FindViewById(Resource.Id.webViewapp) as WebView;
my_web_client = new MyWebViewClient(this.ApplicationContext);
app_view.SetWebViewClient(my_web_client);
string app_url = "file:///android_asset/app_pages/test.html";
app_view.LoadUrl(app_url);
my_splash = FindViewById(Resource.Id.imageSplash) as ImageView;
my_splash.SetImageDrawable(GetDrawable(Resource.Drawable.splash));
}
public void HideSplash()
{
my_splash.Visibility = ViewStates.Gone;
}
}
在这个类中,我可以获得 WebView 页面加载状态。
public class MyWebViewClient : WebViewClient
{
Context context;
public MyWebViewClient(Context _context) {
this.context = _context;
}
public override void OnPageStarted(WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
**I need to change visible my_splash**
}
}
解决方案
从另一个类中获取活动的更简单的方法是从视图上下文中获取活动,这也不太容易出错并且不太可能导致内存泄漏。
在你的MyWebViewClient
课堂上:
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
(view.Context as MainActivity).HideSplash();
}
或者,如果您不确定上下文是否始终是MainActivity
您可以使用覆盖空检查的模式匹配:
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
if(view.Context is MainActivity mainActivity)
{
mainActivity.HideSplash();
}
}
使用这样的方法更容易维护。
推荐阅读
- rust - 如何安装 +nightly (无论这意味着什么),这样我就可以运行 cargo expand
- java - firebase 数据库数据中的混合数据
- reactjs - 更好地使用 useEffect 钩子而不需要使用回调
- asp.net - 即使 web.config 设置为允许,ASP.NET 也会为文件返回 401 Unauthorized?
- python - 基于使用预训练嵌入的词集的词义消歧
- heroku - Heroku 应用程序崩溃
- jenkins - Jenkins 和插件升级后的 Jenkins ActiveChoiceParam 异常
- r - 将多个数据帧的手段组合成一个数据帧,同时为每个数据帧显示一个名称
- scala - 使用 Intellij 从 scala 测试链接到 Suites 类运行单个测试
- javascript - 下一次迭代开始前的 API 调用在循环中开始