내 응용 프로그램에 Fragments
을 사용하고 있습니다. Fragment
에 ImageView
이 있습니다. ImageView
사용자를 클릭하면 갤러리에서 이미지를 선택할 수 있어야하며 이미지는 동일한 ImageView
에 표시되어야합니다. 나는 이것을 Activity
클래스에서 개별적으로 시도했지만 잘 동작하지만 Fragment
클래스에서 어떻게 할 수 있습니까? 코드는 당신이 당신의 논리를 할 onActivityResult
를 오버라이드 (override)는 Activity
새로운 않습니다하지만 Fragment
에 startActivityForResult
를 사용하여 다음 Fragment
에ImageView 클릭시 조각 내 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();
}
}
당신이 말한 것을 조금 이해할 수 있습니까? – DharanBro
음, BrowsePictureActivity에서''changeImage'' 바디 코드를 조각의 이미지''onClick'' 블록에 복사하고 조각에 "onActivityResult"를 복사해야합니다. 약간의 syntac 오류가 있지만 그것을 고치기가 어렵지 않습니다. – longkai
나는 당신이 말한 무엇을 시도했지만 이미지를 선택한 후 "불행히도 애플 리케이션이 닫힙니다"내 질문에 코드를 편집 해주세요. – DharanBro