問題描述:在onCreateView在獲取到programListFragment,然后在onActivityCreated中調用programListFragment.getView(),就在這里出現空指針異常。
解決方案:在onActivityCreated中新建AsyncTask在doInBackground中sleep一下,然后在onPostExecute中調用programListFragment.getView(),這樣處理以后就沒有再出現上述空指針異常。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view != null) { ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) parent.removeView(view); } try { view = inflater.inflate(R.layout.fragment_watchtv, container, false); } catch (InflateException e) { /* fragment_main is already there, just return view as it is */ } channelListFragment = (TvChannelListFragment) getFragmentManager().findFragmentById(R.id.channel_list_fragment); commentListFragment = (TvCommentListFragment) getFragmentManager().findFragmentById(R.id.comment_list_fragment); programListFragment = (TvProgramListFragment) getFragmentManager().findFragmentById(R.id.program_list_fragment); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); new AsyncTask<Void, Void, Void>(){ @Override protected Void doInVoid... params) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } return null; } protected void onPostExecute(Void result) { programListFragment.getView().setOnTouchListener(programTouchListener); } }.execute(); }
要求:在ChannelListFragment中調用ProgramListFragment的實例。ChannelListFragment和ProgramListFragment是平級關系。
實現:在ProgramListFragment類中創建static類型變量sInstance,在onCreate方法中給sInstance賦值,然后在ChannelListFragment中調用sInstance。
ProgramListFragment中處理邏輯
public static TvProgramListFragment sInstance = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sInstance = this; } public void update(ExtraData extra, ChannelItemData channel) { ImageRender.render(context, channelIcon, extra.getChannelIconURL()); ((TextView) getView().findViewById(R.id.channelName)).setText(extra.getChannelName()); programAdapter = new TvProgramAdapter(getActivity(), data, extra); programListView.setAdapter(programAdapter); if(ChannelSharedPreferenceManager.getInstance().getPref(channel.getChannelId(), "").equals("")) { btnOrder.setImageResource(R.drawable.txt_button_order); } else { btnOrder.setImageResource(R.drawable.txt_button_ordered); } this.extra = extra; this.channel = channel; loadProgramData(); }
ChannelListFragment中調用:
TvProgramListFragment.sInstance.update(extra, item);
相關鏈接:兩個Fragment之間參數的傳遞
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。