1

私はフラグメントを持っており、ビューはonCreateViewのクラス変数に格納されています:

    private FrameLayout mView;
    private TextView countdown;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle bdl) {
            mView = (FrameLayout)inflater.inflate(R.layout.vakit_fragment, container, false);
            countdown = (TextView) mView.findViewById(R.id.countdown);
    ...
            return mView;

    }

ここでは両方とも非 Null であり、コードのどこでも変更されません。

後でこれは Main Activity から呼び出されます。

         MainFragment frag = (MainFragment) mAdapter.getItem(mPager.getCurrentItem());
         if(frag!=null) {
         frag.onSecond();
         }

そしてフラグメントで:

protected void onSecond(){
    String left=times.getLeft();


    if(countdown!=null)     
        countdown.setText(left);

}

onSecond では、mView とカウントダウンの両方が NULL になるのはなぜですか? 私はそれを説明することはできません。

メチン

4

2 に答える 2

5

adapter.getItem() メソッドで Fragments の別のインスタンスを作成すると思います。

于 2013-03-30T10:53:57.363 に答える
2

onCreateViewフラグメントが UI を描画するときにのみ呼び出されます。この場合、onSecondは の前に呼び出されるonCreateViewため、mViewまだ膨張していないため、null になっています。onSecondロジックを に配置することで、これを回避できますonCreateView

于 2014-03-07T20:13:52.380 に答える