1

我在扩展DialogFragment的静态类的片段中有一个edittext。我需要从片段内的edittext获取用户输入。我尝试实例化容器活动并传递值,但它不起作用,因为我认为我需要将其设为最终状态。请看下面静态类的代码:

public class DetailDaily extends BaseActivity implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {
        ...................
        ..................
        String name;
        ........
public static class DialogCreater extends DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final DetailDaily dd = new DetailDaily();
            int title = getArguments().getInt("Title");
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            // Set the dialog title
            switch (title) {
                case 1:
                    ....................................
                case 2:
                    final LayoutInflater inflater = getActivity().getLayoutInflater();
                    final View mView = inflater.inflate(R.layout.edit_dialog, null);
                    builder.setView(mView)
                            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int id) {
                                    EditText userInput = (EditText) mView.findViewById(R.id.dialogEdit);
                                    dd.name = userInput.toString(); 
                                }
                            })
                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {

                                }
                            });
                    break;
            }


            return builder.create();
        }
    }

如何从静态类中读取 userInput?

4

1 回答 1

1

首先,除非你真的需要DialogFragment在你的 Activity 中声明,否则将它移到一个单独的类中(不一定是静态的)。此外,你到底为什么要Activity在你的FragmentDialog?

其次,调用 a 的标准方式DialogFragment是使用newInstance()函数。您可以传入一个回调接口以将结果传递给您的Activity.

请查看Android 文档以获取示例。

public static interface Callback {
    public void onResult(String result);
}

static MyDialogFragment newInstance(MyDialogFragment.Callback callback) {
    MyDialogFragment f = new MyDialogFragment();

    f.setCallback(callback);

    return f;
}

mCallback.onResult(editTextResult);当您有想要返回的东西时,您可以调用Activity

然后打电话给你DialogFragment

// FragmentTransaction boilerfluff here
DialogFragment newFragment = MyDialogFragment.newInstance(new MyDialogFragment.Callback() {
    @Override
    public void onResult(String result) {
        // Do stuff
    }
});
newFragment.show(ft, "dialog");
于 2015-08-14T14:31:45.880 回答