gpt4 book ai didi

android - 根据从 JavaScript 接口(interface)传递的参数启动 Activity

转载 作者:行者123 更新时间:2023-11-29 20:46:18 25 4
gpt4 key购买 nike

当我点击 WebView 中的链接时,我想打开一个新 Activity ,但我不知道如何创建一个将 Object 变量传递给的方法做一个动态的方法。这就是为什么我实际上这样做的原因:

public class WebAppInterface {
public Context mContext;

WebAppInterface(Context c) {
mContext = c;
}

@JavascriptInterface
public void toAbout(){
startActivity(new Intent(MainActivity.this, About.class));
}
@JavascriptInterface
public void toTwitch(){
startActivity(new Intent(MainActivity.this, Twitch.class));
}
@JavascriptInterface
public void toNews(){
startActivity(new Intent(MainActivity.this, News.class));
}

(much more methods like these for specific classes) ...

}

HTML/JS:

<div class="entry" onclick="toTwitch();">Twitch</div>
<div class="entry" onclick="toAbout();">About</div>

<script type="text/javascript">
function toTwitch() {
Android.toTwitch();
}
function toAbout(input) {
Android.toAbout();
}
</script>

MainActivity.java onCreate:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
myWebView.setWebViewClient(new WebViewClient());

myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/index.html");
// Caching
myWebView.getSettings().setDomStorageEnabled(true);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
myWebView.getSettings().setAppCachePath(appCachePath);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheEnabled(true);
}

有没有办法只制作一个方法而不是几十个(toAbout()toTwitchtoNews() 等)哪个更动态?

最佳答案

Android JavaScript 接口(interface)支持参数传递。

您可以创建一个接受 String 的通用方法,获取相应的 Class 并在 startActivity() 上使用它。请注意,您必须使用 Activity完全限定名称,这意味着包括包名称(例如 com.example.About)。

WebAppInterface 中,

@JavascriptInterface
public void openActivity(String activityName) {
String packageName = "com.example";
try {
Class activityClass = Class.forName(packageName + "." + activityName);
mContext.startActivity(new Intent(MainActivity.this, activityClass));
} catch(Exception ex) {
Toast.makeText(mContext, "invalid activity name: " + activityName, Toast.LENGTH_SHORT).show();
}
}

在 HTML/JS 上,

<script type="text/javascript">
function toTwitch() {
Android.openActivity('Twitch');
}
function toAbout() {
Android.openActivity('About');
}
</script>

关于android - 根据从 JavaScript 接口(interface)传递的参数启动 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com