鍍金池/ 問答/Android/ 請問Fragment的ViewPager這樣的空指針該怎么結(jié)局呢?

請問Fragment的ViewPager這樣的空指針該怎么結(jié)局呢?

網(wǎng)上找了其他解決方法也不行
錯誤日志:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference at com.dmxy.fragment.ChannelFragment.onCheckedChanged(ChannelFragment.java:226)

代碼:

  @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if (json != null) {
            Gson gson = new Gson();
            ChannelGameTypeBean channelGameTypeBean = gson.fromJson(json, ChannelGameTypeBean.class);
            List<ChannelGameTypeBean.DataBean> data = channelGameTypeBean.getData();
            //TODO:三大游戲類型需改為動態(tài)加載數(shù)據(jù)
            ChannelGameTypeBean.DataBean dataBean = data.get(0);//初次獲取王者榮耀數(shù)據(jù)  1.英雄聯(lián)盟  2.王者榮耀   3.絕地求生
            List<ChannelGameTypeBean.DataBean.NavBean> nav = dataBean.getNav();
            ChannelGameTypeBean.DataBean.NavBean navBean = nav.get(checkedId);//0.比賽 1.解說   2.戰(zhàn)隊    3.專欄    4.大神
            int navId = navBean.getNavid();
            int sizes = data.size();
            String size = String.valueOf(sizes);
            //傳遞獲取分類游戲數(shù)據(jù)的POST參數(shù)
            BaseApplication.getApplication().getMap().put("navId", navId);
            BaseApplication.getApplication().getMap().put("size", size);
        }
        // TODO 臨時選中
        //TODO:首頁和頻道模塊快速切換有bug
        RadioButton tempButton = getActivity().findViewById(checkedId); // 這行空指針
        Log.d(TAG, "2222222222222");
        tempButton.setOnClickListener(this);
    }
回答
編輯回答
喵小咪
RadioGroup的點擊操作,按道理講,應(yīng)該不會出現(xiàn)getActivity()return null的情況

p.s. 在Fragment里直接通過getActivity().findViewById(...)獲取View的對象,這是不正確的做法,正確做法:Android Developer: Communicating with Other Fragments

2017年1月17日 20:38
編輯回答
朕略傻

這里產(chǎn)生空指針有兩個原因:
a)Fragment只有在onCreateView之后View才會被賦值,可能在此之前獲取View
b)Fragment已經(jīng)調(diào)用了onDestroyView,可能在此之后獲取View

如果要正確獲取某個視圖,一定要確保生命周期執(zhí)行準確。針對你的這種情況,在此之前應(yīng)該先判斷Fragment的getView獲取的視圖是否為空,如果不為空,在Fragment中使用getView().findViewById()獲取子View。如果在Activity中,可以參照第一個回答位置處的回調(diào)處理。

2018年4月25日 12:43