使用DialogFragment调用NullPointerException活动

时间:2013-01-22 00:33:37

标签: android android-dialogfragment

我正在将对话框转换为DialogFragments。我正在按照here的说明操作,但看起来他们正在Activity中使用它并且我在Fragment中使用它。我已将Listener创建回我的片段,但当我致电getActivity()时,它会抛出NullPointerException

public class DialogTextAdd extends DialogFragment implements OnEditorActionListener {

    private EditText mText;

    public interface DialogTextAddListener {
        void onDialogTextAdd(final String inputText);
    }

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

    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.dialog_edit, container);
        mText = (EditText)view.findViewById(R.id.Text_add);
        getDialog().setTitle("Add Text");

        // Show soft keyboard automatically
        mText.requestFocus();
        getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        mText.setOnEditorActionListener(this);

        return view;
    }

    @Override
    public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
        if (EditorInfo.IME_ACTION_DONE == actionId) {

            new MyFragment().onDialogTextAdd(mText.getText().toString()); //think this is my problem
            this.dismiss();
            return true;
        }
        return false;
    }
}

public class MyFragment extends SherlockListFragment implements DialogKeywordAddListener
{
    @Override
    public void onDialogTextAdd(final String text) {
        Toast.makeText(getActivity(), text + " saved", Toast.LENGTH_SHORT).show();
    }


@Override
public void onAttach(Activity act) {
    super.onAttach(act);
}


}

使用此代码可以使其工作:

    MyFragment mf = new MyFragment();
    Bundle args = new Bundle();
    args.putString("text", mText.getText().toString());
    mf.setArguments(args);

    getActivity().getSupportFragmentManager().beginTransaction().add(mf, "my_fragment").commit();

2 个答案:

答案 0 :(得分:2)

您不应该使用getSupportFragmentManager()并通过.add(fragment, tag)FragmentTransaction新片段的实例添加到.beginTransaction(),然后拨打commit() ?我想那就是你要做的。

getActivity()返回null,因为您的新Fragment实例未附加到活动(原生FragmentActivity/ActivitySherlockFragmentActivity/SherlockActivity,无论它是什么)。

做一些关于使用片段的读物。片段的实例化是不够的。在实例化后查找底层操作。

答案 1 :(得分:0)

使用:

getActivity().getApplicationContext()

而不是:

getActivity()

修改

使用此方法

@Override
public void onAttach(SupportActivity activity) {
    super.onAttach(activity);
}