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 文件确实包含所有引用的按钮和 numberPickers。当它运行时,在“np.setMaxValue(20);”处发现一个空指针异常,我可以让它工作的唯一方法是注释掉你看到的所有注释掉的部分。

  • 是否有一些我不知道的规则指出我无法在对话片段中设置我的 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);in onCreateView(),注意“视图” 。

于 2012-07-15T12:39:07.273 回答