gpt4 book ai didi

java - 在 Android 中显示/隐藏 WebView

转载 作者:行者123 更新时间:2023-11-30 02:48:06 24 4
gpt4 key购买 nike

我有多个 WebViews 存储在 HashMap 中,我需要能够随时显示/隐藏。

当点击 ListView 中的一行时,我需要显示与该行关联的 WebView 并隐藏所有其他行。其他 WebViews 无法销毁,因为我不想卸载它们的内容。

这可能吗?

在一个 Fragment 中创建和存储 WebView:

public WebView createWebView(Long id) {
WebView wv = new WebView(getActivity());
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:(registerCredentialsChangedCallback(function(credentials) {if (credentials.length >= 1) {window.location.href = 'callback:' + credentials;} else {alert('Error: callback set by registerCredentialsChangedCallback was given null string');}})) ()");
}
});
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);

wv.loadUrl(makeViewerURL(id));

webViews.put(id, wv);

return wv;
}

onCreate 在另一个 Fragment 中。我正在使用 interface 通过 Activity 将 id 传递给 Fragment 应该显示 WebView :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_directory, container, false);

ListView listView = (ListView) rootView.findViewById(R.id.list);

DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
android.R.layout.simple_list_item_1, android.R.id.text1, values);

final SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1, dbHelper.getViewers(), new String[] { "description", "_id" }, new int[] { android.R.id.text1 }, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Long id = adapter.getItemId(i);

mCallback.onViewerSelected(id);
}
});

return rootView;
}

应包含 WebView 的 View 的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#FFFFFF" >

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>

谢谢!

最佳答案

是的,这是可能的 - 但您需要有一个键值对 id 和 WebView

private Map<Long, View> mWebViews = new HashMap<Long, View>();

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Long id = adapter.getItemId(i);
if(mViews.contains(id))
mWebView = mViews.get(id)
else
mWebView = createWebView();
}
});

然后你只需要找到用户在列表中选择的对应的WebView,并使其可见。为了隐藏 WebView 你需要使用:

mWebView.setVisibility(View.Gone);

附录:在您的 xml 文件中使用 frameLayout 而不是 webView,例如:

<FrameLayout
android:id="@+id/web_container"
android:layout_width="fill_parent"
android:layout_height="420dip"
android:layout_gravity="center"
android:clickable="true"
android:enabled="true"
android:paddingLeft="10dip"
android:paddingRight="10dip" />

然后在代码中将 WebView 添加到 Framelayout:

FrameLayout mWebContainer = (FrameLayout) findViewById(R.id.web_container);
webView = new WebView(getApplicationContext());
mWebContainer.addView(webView);

关于java - 在 Android 中显示/隐藏 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678894/

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