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

조회수 2748회
            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 부분은 저렇게 마무리해도 괜찮은건가요? 알 수 없는 사용자 2016.5.19 15:11
  • 에러로그는 집가자마자 올리겠습니다 알 수 없는 사용자 2016.5.19 15:24
  • else를 저렇게 두면 빌드 에러가 발생하지만 죽는 현상과 직접적인 영향은 없습니다. else문은 getActivity().onBackPressed(); 를 호출해주세요. 알 수 없는 사용자 2016.5.19 17:55
  • 에러로그 답변으로 올렸습니당.. 알 수 없는 사용자 2016.5.19 19:54

2 답변

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

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 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)
    

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)