[英]WebView inside Fragment - Back button?
我創建了一個帶有片段的小型Android 4應用程序。 在所有這些片段中,我都有一些Web視圖,如果單擊其他片段,則希望加載其他網站。
我現在有TabOne.java
; TabTwo.java
; TabThree.java
等。
我還想知道:是否可以在不需要TabOne.java
, TabTwo.java
等的情況下創建此應用程序; 僅來自MainActivity.java
嗎? 我的意思是,只有一個WebView
,並且在單擊不同的選項卡時,此WebView
會加載不同的網址(根據所選的選項卡)。 如果這不可能,那么您能告訴我這里出什么問題了TabOne.java
( TabOne.java
):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.tabone, container, false);
myWebView = (WebView) view.findViewById(R.id.webview);
myWebView.getSettings().setPluginsEnabled(true);
myWebView.loadUrl("http://m.stirileprotv.ro");
myWebView = new WebView(getActivity());
myWebView.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack())
{
myWebView.goBack();
return true;
}
return false;
}
});
myWebView.setWebViewClient(new WebViewClient() {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("m.stirileprotv.ro")) {
myWebView.loadUrl(url);
return true;
}
else
{
return false;
}
}
});
return view;
}
我所做的就是在活動中實施它,然后有了一個公共靜態變量,因此:
在主要活動中:
public class MainActivity extends FragmentActivity{
public static WebView myWebView;
...
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("yourtag") != null) {
if(myWebView.canGoBack())
myWebView.goBack();
else {
super.onBackPressed();
}
}
else
super.onBackPressed();
}
...
}
並在片段中引用它:
MainActivity.myWebView = (WebView) getView().findViewById(R.id.webview);
並確保在創建片段時添加標簽
transaction.replace(R.id.yourfragid, newfragment, "yourtag");
這就是我所做的。
在片段中,將Webview引用聲明為static-
public static WebView mWebView;
public WebFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_web, container, false);
mWebView = (WebView) v.findViewById(R.id.webview);
mWebView.loadUrl("https://google.com");
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());
return v;
}
public boolean canGoBack() {
return mWebView.canGoBack();
}
public void goBack() {
mWebView.goBack();
}
}
現在,在父活動中-
@Override
public void onBackPressed() {
WebFragment fragment = new WebFragment();
if (fragment.mWebView.canGoBack()) {
fragment.mWebView.goBack();
} else {
super.onBackPressed();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.