2017-11-13 8 views
0

WebActivity라는 viewPager에 대한 활동이 있습니다. viewPager는 WebView Fragment의 인스턴스를 사용합니다 (조각에 내부에 webview가 있음) .WebActivity의 제목을 " 로드 ... "를 viewPager 내부의 조각에서 웹보기를 표시하는 것은 loading.It 어떤 문제가 발생하지 않습니다하지만 내가 페이지를 통해 많이 이동하면 아래 그림과 같이 내가 로그와 충돌을 얻을 : 여기내 활동 제목을 조각으로 변경하면 충돌이 발생합니다.

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.setTitle(java.lang.CharSequence)' on a null object reference 
    at com.example.android.gametalks.Fragments.WebViewFragment$1.onPageFinished(WebViewFragment.java:91) 
    at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:199) 
    at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:72) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:168) 
    at android.app.ActivityThread.main(ActivityThread.java:5885) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 

내 조각 (관련 부분) :

public class WebViewFragment extends Fragment { 

    WebView mWebView; 
    String currentUrl; 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     currentUrl = getArguments().getString("currentUrl"); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.webview_fragment, container, false); 
return rootView; 
    } 


    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     getActivity().setTitle("Web View"); 

     setRetainInstance(true); 
     mWebView = (WebView) view.findViewById(R.id.webvieww); 

     mWebView.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(getActivity(), description, Toast.LENGTH_SHORT).show(); 


      } 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) 
      { 
       getActivity().setTitle("Loading..."); 
      } 


      @Override 
      public void onPageFinished(WebView view, String url) { 

       super.onPageFinished(view, url); 
       getActivity().setTitle("Web View"); 
      } 
     }); 


     if (savedInstanceState == null) 
     { 
      mWebView.loadUrl(currentUrl); 
     } 

    } 
+0

line 91 is null ... 무엇이든간에, 의미가없는 것은 의미가 없습니다. – DroiDev

+0

androidmanifest 파일을 넣을 수 있습니까? – diegoveloper

답변

1

Sh ort 응답 : getActivity()이 액세스하기 때문에 null을 반환하는지 확인하십시오.

if(getActivity() != null) { 
    getActivity().setTitle("New title"); 
} 

긴 대답 : 그것은 조각 내에서 변화의 활동을 알려보다는 직접 getActivity()를 사용하는 청취자의 일종을 사용하는 것이 가장 좋습니다. 인터페이스를 사용하여이를 수행하는 방법에 대한 Google Developer docs have a pretty good walkthrough.

+0

제가 시험해 보도록하겠습니다. –

+0

충돌 문제를 해결했습니다. 감사합니다. –