首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用片段在Web视图中向后导航?

如何使用片段在Web视图中向后导航?
EN

Stack Overflow用户
提问于 2015-10-11 05:00:27
回答 1查看 121关注 0票数 1

当我试图从我的网页视图(在片段中)向后导航时,我不断地得到一个错误,是什么导致了这个问题?

我的日志猫:

代码语言:javascript
复制
    10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime: FATAL EXCEPTION: main
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime: Process: pi.com.ndtc, PID: 28567
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.webkit.WebView.canGoBack()' on a null object reference
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at pi.com.ndtc.SocialActivity.onKeyDown(SocialActivity.java:343)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.KeyEvent.dispatch(KeyEvent.java:2619)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.app.Activity.dispatchKeyEvent(Activity.java:2707)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2276)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4020)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3982)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3713)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3874)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.os.MessageQueue.nativePollOnce(Native Method)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.os.MessageQueue.next(MessageQueue.java:143)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:122)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5257)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
10-10 22:42:23.926 28567-28567/pi.com.ndtc E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

logcat指向这一行

代码语言:javascript
复制
    at pi.com.ndtc.SocialActivity.onKeyDown(SocialActivity.java:343)

在这里:

代码语言:javascript
复制
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebViewInstagram.canGoBack()) 

--这是我尝试在web视图中向后导航的方法:

代码语言:javascript
复制
     @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    WebView myWebViewInstagram = (WebView) findViewById(R.id.webview_instagram);



    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebViewInstagram.canGoBack()) {
        myWebViewInstagram.goBack();

        return true;
    }


    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

My片段:

代码语言:javascript
复制
public class FragmentThree extends Fragment {
public FragmentThree(){
    //Required empty constructor
}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
    // Inflate the layout for this fragment
    //return inflater.inflate(R.layout.fragment_two, container, false);

    //Using the "View" to obtain the WebView
    View viewInsta = inflater.inflate(R.layout.fragment_three, container, false);

    //in app WebView
    WebView myInstagramWebView = (WebView) viewInsta.findViewById(R.id.webview_instagram);
    WebSettings webSettings = myInstagramWebView.getSettings();//required for enabling javascript
    webSettings.setJavaScriptEnabled(true); //javascript was disabled by default by webView; i enabled it
    myInstagramWebView.setWebViewClient(new WebViewClient());
    myInstagramWebView.setWebChromeClient(new WebChromeClient());
    final ProgressDialog dialog;
    dialog = new ProgressDialog(getActivity(),R.style.MyDialogTheme);
    //dialog.setMessage("Loading...");
    dialog.show();
    myInstagramWebView.loadUrl("https://instagram.com/ndtcjamaica/");

    myInstagramWebView.setWebViewClient(new WebViewClient() {
                                          public void onPageFinished(WebView myInstagramWebView, String url) {
                                              // DISMISS PROGRESS DIALOG HERE
                                              dialog.dismiss();
                                          }
                                      }
    );

    return viewInsta;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-11 05:07:26

使用这个mWebView应该是您的Use视图。

你必须申报

代码语言:javascript
复制
private WebView mWebView;

onCreate()方法中初始化它,这样就可以了。

代码语言:javascript
复制
mWebView = (WebView) findViewById(R.id.webView);

然后使用下面的代码进行活动

代码语言:javascript
复制
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

如果您在片段中使用这个

代码语言:javascript
复制
webView.setOnKeyListener(new OnKeyListener()
{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN)
        {
            WebView webView = (WebView) v;

            switch(keyCode)
            {
                case KeyEvent.KEYCODE_BACK:
                    if(webView.canGoBack())
                    {
                        webView.goBack();
                        return true;
                    }
                    break;
            }
        }

        return false;
    }
});

要从所有片段调用,请使用下面的方法

代码语言:javascript
复制
((YourActivityClassName)getActivity()).yourPublicMethod(); 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33061718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档