簡體   English   中英

片段內的WebView-后退按鈕?

[英]WebView inside Fragment - Back button?

我創建了一個帶有片段的小型Android 4應用程序。 在所有這些片段中,我都有一些Web視圖,如果單擊其他片段,則希望加載其他網站。

我現在有TabOne.java ; TabTwo.java ; TabThree.java等。

我還想知道:是否可以在不需要TabOne.javaTabTwo.java等的情況下創建此應用程序; 僅來自MainActivity.java嗎? 我的意思是,只有一個WebView ,並且在單擊不同的選項卡時,此WebView會加載不同的網址(根據所選的選項卡)。 如果這不可能,那么您能告訴我這里出什么問題了TabOne.javaTabOne.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM