您好,登錄后才能下訂單哦!
問題描述:在onCreateView在獲取到programListFragment,然后在onActivityCreated中調(diào)用programListFragment.getView(),就在這里出現(xiàn)空指針異常。
解決方案:在onActivityCreated中新建AsyncTask在doInBackground中sleep一下,然后在onPostExecute中調(diào)用programListFragment.getView(),這樣處理以后就沒有再出現(xiàn)上述空指針異常。
@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中調(diào)用ProgramListFragment的實(shí)例。ChannelListFragment和ProgramListFragment是平級(jí)關(guān)系。
實(shí)現(xiàn):在ProgramListFragment類中創(chuàng)建static類型變量sInstance,在onCreate方法中給sInstance賦值,然后在ChannelListFragment中調(diào)用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中調(diào)用:
TvProgramListFragment.sInstance.update(extra, item);
相關(guān)鏈接:兩個(gè)Fragment之間參數(shù)的傳遞
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。