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


            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년 05월 19일에 작성됨

  • 앱이 중지 될때 나오는 에러로그를 올려주셔야 원인을 알 수 있을것 같습니다    송주연   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     
조회수 478


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)

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

  • 2016년 05월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close