Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从片段中的dialogFragment接收数据_Android_Fragment_Dialogfragment - Fatal编程技术网

Android 无法从片段中的dialogFragment接收数据

Android 无法从片段中的dialogFragment接收数据,android,fragment,dialogfragment,Android,Fragment,Dialogfragment,日志cat和toast都没有显示片段1中的任何数据。作为初学者,我不想创建对我来说很难的界面。我遵循了第二个解决方案 请编辑我的代码。 //主要片段代码: public class FragmentOne extends Fragment { public static final int PICKER = 1; @Override public View onCreateView(LayoutInflater inflater,

日志cat和toast都没有显示片段1中的任何数据。作为初学者,我不想创建对我来说很难的界面。我遵循了第二个解决方案

请编辑我的代码。
//主要片段代码:

    public class FragmentOne extends Fragment {
            public static final int PICKER = 1;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_one, container, false);
            layout=(ViewGroup)rootView.findViewById(R.id.mainLayout);

            layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FragmentManager fm = getActivity().getSupportFragmentManager();
                    DFragment dialogFragment = new DFragment ();
           dialogFragment.setTargetFragment(dialogFragment, PICKER);
                    dialogFragment.show(fm.beginTransaction(), "Sample Fragment");

                }
            });
     return rootView;
        }
    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case PICKER:
                    if (resultCode == Activity.RESULT_OK) {

                        Bundle bundle = data.getExtras();

                        String size = bundle.getString("size");  
                        Log.i("PICKER", "Got year=" + size +  ", yay!");

                    } else if (resultCode == Activity.RESULT_CANCELED) {
                        Toast.makeText(getActivity(), "user did not entered", Toast.LENGTH_SHORT).show();

                    }
                    break;}}

    // Dialog Fragment Code is here :



    public class DFragment extends DialogFragment implements View.OnClickListener{
        Button small, medium, large, xlarge;     

        String size =null;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.dialog, container,
                    false);

            small = (Button) rootView.findViewById(R.id.small);
            small.setOnClickListener(this);
            medium = (Button) rootView.findViewById(R.id.medium);
            medium.setOnClickListener(this);
            large = (Button) rootView.findViewById(R.id.large);
            large.setOnClickListener(this);
            xlarge = (Button) rootView.findViewById(R.id.xlarge);
            xlarge.setOnClickListener(this);
            getDialog().setTitle("DialogFragment Tutorial");

            return rootView;
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {

                case R.id.small:

                     size = small.getText().toString();
                    dismiss();
                    break;

                case R.id.medium:
                    size = medium.getText().toString();
                    dismiss();

                    break;

                case R.id.large:
                    size = large.getText().toString();
                    dismiss();

                    break;
                case  R.id.xlarge:
                    size = xlarge.getText().toString();
                    dismiss();
                    break;

                default:
                    break;
            }

            Intent i = new Intent();
            i.putExtra("size", size);
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);   
        }  

    }

我建议对您的代码进行几处更改:

  • 不要直接创建对话框片段的对象,而要使用新的实例方法。链接中的示例代码。 [创建新对话框实例][1]

  • getTargetFragment返回中设置的片段 setTargetFragment(dialogFragment,PICKER)

    使用:

    setTargetFragment(这个,PICKER)


  • 这将把您的调用片段设置为目标片段。

    我在代码中添加了新的实例方法,但将对话框片段替换为“This”会出现类似这样的错误:“找到了错误的第一个参数类型view.view.onclicklsitener Required v4.app.fragment”。谢谢你的回答:)我很抱歉没有具体说明。这里我指的是调用对话框的片段的实例。