【问题标题】:unable to receive data from dialogFragment in a fragment无法从片段中的 dialogFragment 接收数据
【发布时间】:2017-05-06 10:29:34
【问题描述】:

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

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

    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);   
        }  

    }

【问题讨论】:

    标签: android fragment dialogfragment


    【解决方案1】:

    我建议对您的代码进行一些更改:

    1. 不要直接创建对话框片段的对象,而是使用新的实例方法。链接中的示例代码。 [创建一个新的对话框实例][1]https://developer.android.com/reference/android/app/DialogFragment.html.

    2. getTargetFragment 返回设置的片段 dialogFragment.setTargetFragment(dialogFragment, PICKER);

      用途:

      dialogFragment.setTargetFragment(this, PICKER);

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

    【讨论】:

    • 我在我的代码中添加了新的实例方法,但是用“this”替换对话框片段会出现类似“错误的第一个参数类型找到 view.view.onclicklsitener 需要 v4.app.Fragment ”的错误。谢谢你的回答:)
    • 我很抱歉没有具体说明。我的意思是您从中调用对话框的片段的实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2021-08-23
    相关资源
    最近更新 更多