【问题标题】:replace fragment in onActivityResult替换 onActivityResult 中的片段
【发布时间】:2014-07-13 05:13:30
【问题描述】:

这是我的占位符片段

public  static class PlaceholderFragment extends Fragment {

        private static final String ARG_SECTION_NUMBER = "section_number";

        public static int SectionNumber;
        public static LayoutInflater Inflater;
        public static ViewGroup Container;
        public static Bundle SavedInstanceState;

        public static PlaceholderFragment newInstance(int sectionNumber) {
            SectionNumber = sectionNumber;
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment()
        {   }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            Inflater = inflater;
            Container = container;
            SavedInstanceState = savedInstanceState;
            View rootView = null;

            switch (SectionNumber)
            {
                case 1:
                    rootView = inflater.inflate(R.layout.fragment_main, container, false);
                    break;
                case 2:
                    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                    intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
                    startActivityForResult(intent, 0);
                    break;
                case 3:
                    rootView = inflater.inflate(R.layout.fragment_main, container, false);
                    marketActivity = new MarketActivity(context);
                    marketActivity.loadMarkets(rootView);
                    break;
                case 4:
                    rootView = inflater.inflate(R.layout.fragment_main, container, false);
                    break;
            }
            return rootView;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((MainActivity) activity).onSectionAttached(
                    getArguments().getInt(ARG_SECTION_NUMBER));
        }

        public void onActivityResult(int requestCode, int resultCode, Intent intent)
        {
            Log.e("onActivityResult", "1");
            if(requestCode == 0)     {

                if(resultCode == RESULT_OK)         {
                    Log.e("onActivityResult", "3");


                    String contents = intent.getStringExtra("SCAN_RESULT");
                    String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

                    movementActivity = new MovementActivity(context);
                    movementActivity.setUp(contents);

                    Inflater.inflate(R.layout.fragment_movement, Container, false);
                    Log.e("onActivityResult", "2");
                    Log.i("xZing", "contents: "+contents+" format: "
                            +format);

                    // Handle successful scan
                }
                else if(resultCode == RESULT_CANCELED)
                {              // Handle cancel
                    Log.i("xZing", "Cancelled");
                }
            }
        }
    }

resultCodeRESULT_OK 时,我面临的问题是onActivityResult 我想用Inflater.inflate(R.layout.fragment_movement, Container, false); 替换当前片段我希望我能把我的问题告诉你,我真的很抱歉我的英语不好

【问题讨论】:

    标签: android android-fragments onactivityresult


    【解决方案1】:

    也许有一种更简单的方法可以做到这一点,但您可以做的是在您启动活动的实际片段中覆盖 onActivityResult 方法以获得结果。

    在托管片段的 Activity 中实现一个用于处理回调的接口

    public interface ActivityResultCallbacks {
    
            void onResultOK(int request, int result);
        }
    

    在您的片段转换中并存储对回调的引用

    private ActivityResultCallbacks mCallbacks;
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mCallbacks = (ActivityResultCallbacks) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException("Activity must implement ActivityResultCallbacks.");
            }
        }
    

    在fragment的onActivityResult中通知回调

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent){
         mCallbacks.onResultOK(requestCode, resultCode);
    }
    

    在您的父活动中,在回调开关片段上

    @Override
    public void onResultOK(int request, int result){
      //check for result and requestcode
      Fragment fragment = new YourFragment();
      FragmentManager fragmentManager = getFragmentManager();
      fragmentManager.beginTransaction().replace(R.id.YourContainer, fragment).commit();
    }
    

    【讨论】:

    • 方法不会覆盖或实现 onResultOK 中超类型的方法
    • 将onResultOK放在父activity中
    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2014-07-25
    • 2014-04-28
    相关资源
    最近更新 更多