0

ダイアログをに変換中ですDialogFragments。私はここの指示に従っていますが、彼らはでそれを使用しているようで、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();
4

2 に答える 2

2

フラグメントの新しいインスタンスを使用getSupportFragmentManager()して追加( )してから、を呼び出してはいけませんか?それがあなたがやろうとしていることだと思います。.add(fragment, tag)FragmentTransaction.beginTransaction()commit()

getActivity()null新しいフラグメントインスタンスがアクティビティ(ネイティブFragmentActivity/ActivityまたはSherlockFragmentActivity/SherlockActivity、それが何であれ)にアタッチされていないために戻ります。

フラグメントの使用についていくつか読んでください。フラグメントのインスタンス化は十分ではありません。インスタンス化後の基礎となる操作について調べます。

于 2013-01-22T01:15:04.530 に答える
0

使用する :

getActivity().getApplicationContext()

それ以外の:

getActivity()

編集:

この方法を使用する

@Override
public void onAttach(SupportActivity activity) {
    super.onAttach(activity);
}
于 2013-01-22T00:38:52.753 に答える