2014-03-13 5 views
0

내 응용 프로그램에 Fragments을 사용하고 있습니다. FragmentImageView이 있습니다. ImageView 사용자를 클릭하면 갤러리에서 이미지를 선택할 수 있어야하며 이미지는 동일한 ImageView에 표시되어야합니다. 나는 이것을 Activity 클래스에서 개별적으로 시도했지만 잘 동작하지만 Fragment 클래스에서 어떻게 할 수 있습니까? 코드는 당신이 당신의 논리를 할 onActivityResult를 오버라이드 (override)는 Activity 새로운 않습니다하지만 FragmentstartActivityForResult를 사용하여 다음 FragmentImageView 클릭시 조각 내 ImageView 변경

public class FragmentCreateGroup extends Fragment { 
    ImageView group; 
    EditText et; 
    LayoutInflater glob_inflater; 
    View glob_view; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 



    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.fragment_creategroup, container, false); 
      glob_view=v; 
      glob_inflater=inflater; 
      et = (EditText) v.findViewById(R.id.cr_group_grpname_input); 
      group = (ImageView) v.findViewById(R.id.group_image); 
      group.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent intent = new Intent(); 
        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 
        startActivityForResult(Intent.createChooser(intent, 
          "Select Picture"), 1); 
       } 


      }); 
      return v; 
    } 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == -1) { 
      if (requestCode == 1) { 
       Uri selectedImageUri = data.getData(); 
       String selectedImagePath = getPath(selectedImageUri); 

       BitmapFactory.Options options = new BitmapFactory.Options(); 

       options.inSampleSize = 2; 
       Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath, options); 

       group.setImageBitmap(BitmapFactory.decodeFile(selectedImagePath)); 
      } 
     } 
    } 

    public String getPath(Uri uri) { 
     // just some safety built in 
     if(uri == null) { 
      // TODO perform some logging or show user feedback 
      return null; 
     } 
     Activity act=new Activity(); 
     // try to retrieve the image from the media store first 
     // this will only work for images selected from gallery 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor =act.managedQuery(uri, projection, null, null, null); 
     if(cursor != null){ 
      int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } 
     // this is our fallback here 
     return uri.getPath(); 
} 
    public void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 

    } 

} 

답변

0

IS-을 시도했다.

꽤 똑같습니다. 시험해보십시오!

+0

당신이 말한 것을 조금 이해할 수 있습니까? – DharanBro

+0

음, BrowsePictureActivity에서''changeImage'' 바디 코드를 조각의 이미지''onClick'' 블록에 복사하고 조각에 "onActivityResult"를 복사해야합니다. 약간의 syntac 오류가 있지만 그것을 고치기가 어렵지 않습니다. – longkai

+0

나는 당신이 말한 무엇을 시도했지만 이미지를 선택한 후 "불행히도 애플 리케이션이 닫힙니다"내 질문에 코드를 편집 해주세요. – DharanBro

0

StartActivityForResult의 경우 더 나은 솔루션을 얻으려면 다음 단계를 따라야합니다.

1.While부터 사용 getActivity.StartActivityForResult()

2. 사용자 인터페이스가 활성 단편과 통신한다.

private void chooseOption() { 
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      switch (which) { 
      case DialogInterface.BUTTON_POSITIVE: 
       pickImage(); 
       break; 

      case DialogInterface.BUTTON_NEGATIVE: 
       takePic(); 
       break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(
      this.getActivity()); 
    builder.setMessage("Choose your option") 
      .setPositiveButton("From Gallery", dialogClickListener) 
      .setNegativeButton("Camera", dialogClickListener).show(); 
} 

public void pickImage() { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    getActivity().startActivityForResult(intent, REQUEST_CODE); 
} 

public void takePic() { 
    Intent cameraIntent = new Intent(
      android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    getActivity().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
} 

코드는 활동에 갤러리에서 또는

후 카메라에서 이미지를 얻을 수있는 대화 상자를 보여,이 인터페이스를

public interface onImageGot { 
    public void onImageGotSelected(Uri position); 
} 

를 정의하고 활동이 인터페이스의 인스턴스를 만들 수 있습니다 자신을 만들기 전에 자신

onImageGot mCallback; 

이 인스턴스를 시작하십시오. 유 유 원하는 원하는대로 사용할 수 있습니다 여기에서 귀하의 조각 클래스 에 HomeScreenActivity.onImageGot를 구현하여 onActivityResult를 사용 ..

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Uri selectedImage = null; 
    EditProfile titleFragmentByTag = (EditProfile) getSupportFragmentManager() 
      .findFragmentByTag("edit"); 
    if (titleFragmentByTag != null) { 
     mCallback = (onImageGot) titleFragmentByTag; 
     if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) 
      try { 
       selectedImage = data.getData(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     else if (requestCode == CAMERA_PIC_REQUEST 
       && resultCode == Activity.RESULT_OK) { 
      selectedImage = getImageUri(getApplicationContext(), 
        (Bitmap) data.getExtras().get("data")); 
     } 
     if (selectedImage != null) { 
      mCallback.onImageGotSelected(selectedImage); 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = Images.Media.insertImage(inContext.getContentResolver(), 
      inImage, "Title", null); 
    return Uri.parse(path); 
} 

당신의 조각은 URI를 받고 통해 UR 다음은이

@Override 
public void onImageGotSelected(Uri position) { 
    UpdateImage(position); 
} 

우선합니다.

+0

Kalimuthu UpdateImage (위치)는 무엇입니까? 여기에서 – DharanBro

+0

위치는 uri입니다. 그 uri를 사용하여 u는 무엇을 원하는지 UpdateImage 메서드는 일부 이미지보기로 이미지를 설정합니다. 좋아, 너와 같이 할 수있어. –