1

ここに私のコードのスニペットがあります:

public class ChooseNumWorkoutsDialog extends DialogFragment implements OnClickListener {
    Button btnClose, btnFinished;
    NumberPicker np;

    public ChooseNumWorkoutsDialog() {
        // Empty constructor required for DialogFragment
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_numpicker, container);
        getDialog().setTitle("Number of Exercises");
        btnClose = (Button) findViewById(R.id.btnClose);
        btnFinished = (Button) findViewById(R.id.btnFinished);
        np = (NumberPicker) findViewById(R.id.np);
        //np.setMaxValue(20);
        //np.setMinValue(1);
        //np.setWrapSelectorWheel(false);
        //btnClose.setOnClickListener(this);
        //btnFinished.setOnClickListener(this);   
        return view;
    }

XML ファイルには、参照されているすべてのボタンと numberPicker が含まれています。これを実行すると、「np.setMaxValue(20);」で Null Pointer 例外が見つかります。これを機能させる唯一の方法は、表示されるコメント アウトされた部分をすべてコメント アウトすることです。

  • ダイアログフラグメント内でonclickリスナーなどを設定できないという状態がわからないというルールはありますか?
  • この問題を解決する最善の方法は何ですか?
4

1 に答える 1

4

onActivityCreated()でビューを初期化します。ドキュメントから:

フラグメントのアクティビティが作成され、このフラグメントのビュー階層がインスタンス化されたときに呼び出されます。ビューの取得や状態の復元など、これらの部分が配置されたら、最終的な初期化を行うために使用できます。setRetainInstance(boolean) を使用してインスタンスを保持するフラグメントにも役立ちます。これは、このコールバックが新しいアクティビティ インスタンスに完全に関連付けられていることをフラグメントに通知するためです。これは onCreateView(LayoutInflater, ViewGroup, Bundle) の後、onStart() の前に呼び出されます。

あなたが呼び出すことができるよりもgetView().findViewById(R.id.np);

またはで使用するnp = (NumberPicker) view.findViewById(R.id.np);と、「ビューonCreateView()に注意してください。

于 2012-07-15T12:39:07.273 に答える