在我的应用程序中,我可以选择从图库中选择图片。我想把图像放在图像view...my代码完美地工作(将图像放在图像视图上)最高版本(API21),但不工作(放置图像上图像视图)最低版本(API15)。请任何人帮帮我!
我的应用配置:
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"我的代码如下:
public class ProfileFragment extends Fragment {
//private static Bitmap Image = null;
private ImageView imageView;
private static final int SELECT_PHOTO = 1;
private String selectedImagePath = null;
private Uri mSelectedImageUri;
Button browseProfilePic;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);//For option menu
View view = inflater.inflate(R.layout.fragment_layout_profilepic, container,
false);
imageView = (ImageView)view.findViewById(R.id.profile_image);
browseProfilePic = (Button) view.findViewById(R.id.btn_pick);
browseProfilePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
// Show only images, no videos or anything else
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PHOTO);
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == MenuActivity.RESULT_OK) {
if (requestCode == SELECT_PHOTO) {
mSelectedImageUri = data.getData();
selectedImagePath = getPath(mSelectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
imageView.setImageURI(mSelectedImageUri);
}
}
}
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String s=cursor.getString(column_index);
cursor.close();
return s;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the image bitmap into outState
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
outState.putParcelable("bitmap", bitmap);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Read the bitmap from the savedInstanceState and set it to the ImageView
if (savedInstanceState != null){
Bitmap bitmap = (Bitmap) savedInstanceState.getParcelable("bitmap");
imageView.setImageBitmap(bitmap);
}
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater ) {
super.onCreateOptionsMenu(menu, inflater);
// Inflate the menu; this adds items to the action bar if it is present.
inflater.inflate(R.menu.menu_profile_pic, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()){
case R.id.action_done:
Toast.makeText(getActivity().getApplicationContext(), "Saved", Toast.LENGTH_LONG).show();
}
return super.onOptionsItemSelected(item);
}
}
MenuActivity.java:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode,resultCode,data);
ProfileFragment pm = new ProfileFragment();
pm.onActivityResult(requestCode,resultCode,data);
}
如何解决这个问题..
谢谢你的预支。
发布于 2015-08-26 20:15:08
我认为你的代码不应该在任何版本上工作。您正在创建一些片段类实例,但它是本地的-它只存在于onActivityResult()作用域中。ProfileFragment已附加到您的MenuActivity实例,因此您应该使用FragmentManager或SupportFragmentManager的方法获取对其实例的引用。创建新的ProfileFragment对象没有意义。
startActivityForResult,这样:getActivity().startActivityForResult(...)MenuActivity的onActivityResult()方法只将调用放入<代码>D15,不会有其他调用。<代码>H216<代码>F217https://stackoverflow.com/questions/32225827
复制相似问题