2015-08-26 4 views
0

В моем приложении у меня есть возможность выбрать изображение из галереи. Я хочу разместить изображение в режиме просмотра изображений ... мой код отлично работает (поместите изображение на изображение) для самой высокой версии (API 21), но не работает (поместите изображение на изображение) для самой низкой версии (Api 15). Пожалуйста, помогите мне!Как попасть onActivityResult из самой низкой версии

Мое приложение конфигурации:

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

Как исправить ..

Спасибо за заранее.

+0

Можете ли вы объяснить, что именно не работает? – Opiatefuchs

+0

Изображение не установлено в режиме просмотра изображения – Razul

ответ

0
  • Я думаю, что ваш код не должен работать ни на одной версии API. Вы создаете экземпляр класса Fragment, но он локальный - он живет только в области onActivityResult(). ПрофильFragment уже прикреплен к вашему экземпляру MenuActivity, поэтому вы должны получить рефери к его экземпляру, используя методы FragmentManager или SupportFragmentManager. Создание нового объекта ProfileFragment не имеет смысла.
  • Другое дело, вы должны вызвать startActivityForResult с использованием контекста экземпляра держателя активность, таким образом: getActivity().startActivityForResult(...)
  • в onActivityResult() методе MenuActivity «s поставить только позвонить в super.onActivityResult(...), больше ничего.
+0

Не могли бы вы отредактировать мой код – Razul

Смежные вопросы