안녕하세요 안드로이드 Fragment 내에 WebView에서 뒤로 가기 버튼 클릭 시..(초보입니다.)

조회수 2128회
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (event.getAction() != KeyEvent.ACTION_DOWN)
                    return true;


                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    if (mWebView.canGoBack()) {
                        mWebView.goBack();
                    } else


                    return true;
                }
        });

Fragment에 웹뷰를 적용시킨 상태이고, 핸드폰으로 뒤로가기 버튼 클릭 시 액티비티 밖으로 나가는 것이 아닌 웹뷰 안에서 뒤로가기가 적용이 되게 Fragment 안에 이렇게 코드를 작성했는데요. 앱 실행 시 이 fragment로 가기만 하면 앱이 중지가 됩니다. 코드에서 고쳐야할 부분이 있나요? 도와주시면 감사드립니다

  • 앱이 중지 될때 나오는 에러로그를 올려주셔야 원인을 알 수 있을것 같습니다 송주연 2016.5.19 09:08
  • 올려주신 코드에서는 수정해야 할 부분이 없습니다. 앱 실행 시 Fragment에서 앱이 중지된다고 하셨으니 다른 문제일 가능성이 커보이고요. 크래시 발생 시 출력되는 에러로그를 올려주시면 분석하는데 도움이 될 것 같습니다. 한로니로니 2016.5.19 14:02
  • else 부분은 저렇게 마무리해도 괜찮은건가요? Jaceis 2016.5.19 15:11
  • 에러로그는 집가자마자 올리겠습니다 Jaceis 2016.5.19 15:24
  • else를 저렇게 두면 빌드 에러가 발생하지만 죽는 현상과 직접적인 영향은 없습니다. else문은 getActivity().onBackPressed(); 를 호출해주세요. 한로니로니 2016.5.19 17:55
  • 에러로그 답변으로 올렸습니당.. Jaceis 2016.5.19 19:54

2 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    LostFragment의 <init>에서 NullPointerException이 발생하는 것으로 보아 mWebView.setOnKeyListener() 함수가 Fragment의 생성자에서 호출된 것으로 보입니다. Fragment의 생성자가 호출되는 시점에는 View가 바인드 되기 전이기 때문에 mWebView는 null을 가진 상태입니다. setOnKeyListener 코드를 onCreateView() 함수에 작성해 보시기 바랍니다.

    이렇게 하는 이유는 Fragment의 라이프사이클 링크를 참고하세요.

    https://developer.android.com/guide/components/fragments.html?hl=ko

    • 답변감사드립니다 한번 시도해보겠습니다. Jaceis 2016.5.19 22:53
    • 됩니다 감사드립니다! Jaceis 2016.5.19 23:15
  • 05-19 19:52:45.207 5033-5033/com.chani.ssari E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.chani.ssari, PID: 5033
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.setOnKeyListener(android.view.View$OnKeyListener)' on a null object reference
                                                                       at com.chani.ssari.LostFragment.<init>(LostFragment.java:205)
                                                                       at com.chani.ssari.TabFragment$MyAdapter.getItem(TabFragment.java:73)
                                                                       at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
                                                                       at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:943)
                                                                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1091)
                                                                       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
                                                                       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
                                                                       at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
                                                                       at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2008)
                                                                       at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1025)
                                                                       at android.support.design.widget.TabLayout.selectTab(TabLayout.java:995)
                                                                       at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1272)
                                                                       at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1377)
                                                                       at android.view.View$PerformClick.run(View.java:22526)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:158)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:7224)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    

    오류 로그가 이렇게 뜨네요...

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.