我一直在尝试从厨房中挑选一张图片并将其设置为ImageView。我成功进入画廊并选择图像,但无法将其设置为ImageView。实际上,我无法在我编写的Fragment类中编写OnActivityResult。下面是该类的代码。
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方法,但我无法在其中编写。
@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();
}
}
任何人都可以帮忙解决这个问题吗? 感谢。
答案 0 :(得分:0)
这通常是一种很好的模式,可以将您的观点分别保留在片段和活动中,而不是“交叉使用”#34;它们。
正如NilayDani在上面评论过的,你可以这样做:
getActivity().startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
.onActivityResult可以在你的Activity中使用。
但是要小心,当您使用片段视图,即ImageView callerPic
时,请确保此视图可用且片段已创建且处于活动状态。如果您不注意Activity-Fragment生命周期,这很容易导致崩溃。
作为建议尝试让callerPic
只与片段进行交互,如果可能的话。