替换onActivityResult中的片段

时间:2014-07-13 05:13:30

标签: android android-fragments onactivityresult

这是我的占位符碎片

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我想用Inflater.inflate(R.layout.fragment_movement, Container, false);替换当前片段时,面对我的问题是onActivityResult我希望我能让我的问题清楚,我很抱歉对于mybad english

1 个答案:

答案 0 :(得分:0)

也许有一种更简单的方法,但你可以做的是覆盖你开始结果活动的实际片段中的onActivityResult方法。

在您的活动中实施托管片段的接口以处理回调

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

在片段的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();
}