2017-04-03 21 views
-4

私は自分の断片の一つから開いたギャラリーですが、ギャラリーから画像を選択した後では、画像は表示されません。画像形式のギャラリーを断片的に表示しない

onActivityResultこの行のrootviewにエラーがあります。 ImageView imgView =(ImageView)rootview.findViewById(R.id.imgView); とトーストでテストして、選択した画像のパスを表示しますが、 は表示されません。ここ

私のフラグメントのコードがされます。このメソッドは、ギャラリーを開き、画像を選択する意図のためである

public class Share_Page extends Fragment implements View.OnClickListener { 

    private static final int RESULT_OK = 1; 
    String path=""; 
    String imgPath, fileName; 
    private Button home_page,search_page; 
    private static int RESULT_LOAD_IMG = 1; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootview = inflater.inflate(R.layout.share, container, false); 
     home_page = (Button) rootview.findViewById(R.id.home_page); 
     search_page = (Button) rootview.findViewById(R.id.search_page); 


     rootview.findViewById(R.id.buttonLoadPicture).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       loadImagefromGallery(); 
      } 
     }); 




     btn_click(); 

     return rootview; 
    } 
    public void loadImagefromGallery() { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 

      if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK 
        && null != data) { 
       Uri selectedImage = data.getData(); 
       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

       Cursor cursor = getActivity().getContentResolver().query(selectedImage, 
         filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       imgPath = cursor.getString(columnIndex); 
       cursor.close(); 
       //ImageView imgView = (ImageView) findViewById(R.id.imgView); 
       ImageView imgView = (ImageView) rootview.findViewById(R.id.imgView); 
       imgView.setImageBitmap(BitmapFactory 
         .decodeFile(imgPath)); 
       String fileNameSegments[] = imgPath.split("/"); 
       fileName = fileNameSegments[fileNameSegments.length - 1]; 
       path=imgPath; 

      } else { 
       Toast.makeText(getActivity(), "image not select", 
         Toast.LENGTH_LONG).show(); 
       imgPath="2"; 
      } 
     } catch (Exception e) { 
      Toast.makeText(getActivity(), "error`enter code here`...!", Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 
+0

あなたは私に否定的な投票を与えてくれますか?その重複した質問ではない – ali

+0

ImageViewを定義するimgView =(ImageView)rootview.findViewById(R.id.imgView); onActivityResultから削除します。 – sunita

+0

私はそれを行いますが、それは不明ですonActivityResult – ali

答えて

0

public void loadImagefromGallery(View view) { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityIfNeeded(galleryIntent, RESULT_LOAD_IMG); 
    } 

そして、ここでは画像が選んだ後の結果です。 uは私は背景を変更するために画像を使用して見ての通り、uはImageViewの中にそれを置くことができるか、何が今までuは

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 
      if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK 
        && null != data) { 
       Uri selectedImage = data.getData(); 
       String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
       Cursor cursor = getContentResolver().query(selectedImage, 
         filePathColumn, null, null, null); 
       assert cursor != null; 
       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String imgDecodableString = cursor.getString(columnIndex); 
       cursor.close(); 
       Drawable d = new BitmapDrawable(getResources(), imgDecodableString); 
       relativeLayout.setBackground(d); 
      } 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(); 
     } 
} 

また、権限のランタイムを使用する方法を例

マニフェスト

に権限を追加することを忘れないでください

を望んでいました、活動

private static final int REQUEST_CODE_EXTERNAL_STORAGE = 1; 
    private static final int REQUEST_CODE_CAMERA = 2; 
private static int RESULT_LOAD_IMG = 1; 
@TargetApi(23) 
    public void checkCameraPermission(){ 
     if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){ 
      return; 
     } 
     if (this.checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[] {Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA); 
     } 
    } 

    @TargetApi(23) 
    public void checkStoragePermission() { 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
      return; 
     } 
     if (this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager 
       .PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        REQUEST_CODE_EXTERNAL_STORAGE); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] 
      grantResults) { 
     switch (requestCode) { 
      case REQUEST_CODE_EXTERNAL_STORAGE: 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(this, "Thanks for your permission", LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(this, "We need your permission to save image", 
          LENGTH_SHORT).show(); 
       } 
       break; 
      case REQUEST_CODE_CAMERA: 
       if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
        Toast.makeText(this, "Thanks for your permission", LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(this, "We need your permission to start SOS", 
          LENGTH_SHORT).show(); 
       } 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
       break; 
     } 
} 

に貼り付け、Uはフラグメントのパーミッションを確認したい場合はuが次のように実行する必要があります。

((Activity) getContext()).checkAnyPermission(); 

ギャラリーを開いた後にこれをチェックする必要があります。

+0

Rodriquez

+0

私はあなたのコードを使用していますが、この行にあります relativeLayout.setBackground d); 私にrelativeLayoutのエラーを表示relativeLayoutの代わりに – ali

+0

imgViewを追加する必要がありますか? – ali

関連する問題