Fragment の初期化について質問し、コードを投稿しました ( Android で Fragment を使用する場合は初期化を遅らせる)。問題は解決しました。しかし、私の問題はまだ存在します。変数を取得するために呼び出すonLoad()
と、 がスローされNullPointerException
ます。でこれらの変数を初期化しますonCreateView()
。だから私はライフサイクルが終わったと思います。これらの関数で A.java に情報を記録しました: onDestroy
、onDestroyView
、onStop
。onDestroyView
andonStop
はフラグメント A が別のフラグメントに変更されたときに呼び出されますが、is onDestroy
not は呼び出されます。変:
フラグメント A に EditText があります。文字列を入力しますabc
。1、ライフサイクルが終了した場合、フラグメントを A から別のフラグメントに変更してから A に戻すと、入力は空になります。しかし、そうではありません。2、ライフサイクルが終了していない場合、変数を取得できないのはなぜですか?
abc
それで、どこかに保存するものはありますか?それは何です?どこ?
Fragmentの初期化を遅らせることはできないようです。非静的変数を取得できません。
Code:
/** super class of Fragment */
public class BaseFragment extends Fragment {
public void onLoad(Context context){
}
}
/** */
public class AFragment extends BaseFragment{
TextView name;
@Override
public View onCreateVew(...){
name = new TextView(..);
}
@Override
public void onLoad(Context context){
// here will throw NullPointerException
name.setText("=========");
}
}
public class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,ViewPager.OnPageChangeListener {
....
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.mClss.getName(), info.mArgs);
}
@Override
public void onPageSelected(int position) {
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
BaseFragment f = (BaseFragment) getItem(position);
f.onLoad(mContext);
}
}