无法在片段内编写 onActivityResult 函数 class

Can't write onActivityResult function inside fragment class

我一直在尝试从条样中选取图像并将其设置为 ImageView。我成功地进入画廊并选择了图像,但无法将其设置到 ImageView。实际上,我不能在我写的 Fragment class 里面写 OnActivityResult 。下面是 class.

的代码
public class MainActivity extends FragmentActivity {

// create object of FragmentPagerAdapter
SectionsPagerAdapter mSectionsPagerAdapter;
String imgDecodableString;
ImageView callerPic;// = (ImageView) findViewById(R.id.callerPic);
// viewpager to display pages
ViewPager mViewPager;
final static int cameraData = 0;
private static int RESULT_LOAD_IMG = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.slideview_fragment);

    // Create the adapter that will return a fragment for each of the five
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

/**
 * A FragmentPagerAdapter that returns a fragment corresponding to one of
 * the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.

        switch (position + 1) {
            case 1:

                Fragment fragment1 = new Fragment1();
                return fragment1;
            case 2:

                Fragment fragment2 = new Fragment2();
                return fragment2;


            default:
                Fragment fragment = new Fragment1();
                return fragment;
        }
    }

    @Override
    public int getCount() {
        // Show 5 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Fake CALL";
            case 1:
                return "Fake SMS";

        }
        return null;
    }
}



public static class Fragment1 extends Fragment {


    public Fragment1() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.activity_main, container, false);
//THIS PART OF THE CODE I AM HAVING TROUBLE WITH
        ImageView callerPic = (ImageView) view.findViewById(R.id.callerPic);
        callerPic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                // Start the Intent
                startActivityForResult(galleryIntent, RESULT_LOAD_IMG);

            }
        });

        return view;

    }
}

public static class Fragment2 extends Fragment {

    public Fragment2() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_main2, container, false);

        return view;
    }
 }
}

我必须在 Fragment1 中编写 onActivityResult 方法 class 但我无法在其中编写。

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        // When an Image is picked
        if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);
            cursor.close();

            // Set the Image in ImageView after decoding the String
            callerPic.setImageBitmap(BitmapFactory
                    .decodeFile(imgDecodableString));

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }

}

谁能帮忙解决这个问题? 谢谢

在 Fragments 和 Activity 中单独保存您的视图通常是一个很好的模式,而不是 "cross-use" 它们。

正如 NilayDani 在上面评论的那样,您可以这样做:

getActivity().startActivityForResult(galleryIntent, RESULT_LOAD_IMG);

并且 .onActivityResult 可用于您的 Activity。

但是请注意,当您使用片段视图时,即 ImageView callerPic 以确保此视图可用并且片段已创建并处于活动状态。如果您不注意 Activity-Fragment 生命周期,这很容易导致崩溃。

作为建议,尽量让您的 callerPic 只与 Fragment 交互,当然,如果可能的话。