2

スワイプ ナビゲーションを備えた Android アクティビティがあります (ViewPager で実装)。

public class UberActivity extends FragmentActivity {

ViewPager mViewPager;

protected void onCreate(Bundle savedInstanceState) {
        //... some stuff

        myfragment1=new MyFragment1();
        myfragment2=new MyFragment2();
        myfragment3=new MyFragment3();
        myfragment4=new MyFragment4();
    }

public void onChoiceSelected(){
    mViewPager.post(new Runnable(){public void run(){
        myfragmen1.update();
        myfragmen2.update();
        myfragmen3.update();
        myfragmen4.update();
    }});
}
}

public class Fragment4 extends Fragment {
View v;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container,
        Bundle savedInstanceState) {
        v=layoutInflater.inflate(R.layout.mylayout,container,false);
        return v;
}         
public void update(){
    ((TextView)v.findViewById(R.id.textView1)).setText("new text");
}

事前にスワイプしない限り、update() で NullPointerException が発生します (update() を呼び出す前にレイアウトが実際に膨張するようにします)。ここでの問題は、Fragment4 がインスタンス化されているが、その OnCreateView() が呼び出されていないことです。OnCreateView() が呼び出されているかどうかを確認するにはどうすればよいですか? そこにブール値を入れることはできますが、これがベストプラクティスだとは思いません...

4

1 に答える 1

4

「v」の周りにifステートメントを追加して、それがnullかどうかを確認するだけです。

public void update(){
    if (v != null) {
        ((TextView)v.findViewById(R.id.textView1)).setText("new text");
    }
}
于 2013-02-25T16:26:04.100 に答える