【问题标题】:When changing the title of my activity from fragments cause crash [duplicate]从片段更改我的活动标题时会导致崩溃[重复]
【发布时间】:2017-11-13 20:08:06
【问题描述】:

我有一个名为 WebActivity 的带有 viewPager 的活动。viewPager 使用 webView 片段的实例(片段中包含一个 webview)。我将 WebActivity 的标题从 viewPager 中的片段更改为“正在加载..”表明 webView 正在加载。它不会导致任何问题,但是当我在页面中移动很多时,我会遇到日志崩溃,如下所示:

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);
        }

    }

【问题讨论】:

  • 第 91 行为空......意味着无论它在做什么,它不存在,它不能做到。
  • 你能把你的androidmanifest文件放进去吗?

标签: java android android-fragments android-activity webview


【解决方案1】:

简答:检查 getActivity() 是否因为访问它而返回 null。

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

长答案:最好使用某种侦听器来通知 Activity 片段内的更改,而不是直接使用 getActivity()Google Developer docs have a pretty good walkthrough 说明如何使用接口完成此操作。

【讨论】:

  • 让我试试吧,先生。
  • 解决了崩溃问题。谢谢
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多