Я добавляю возможность загрузки видео в дополнение к фотографиям в моем приложении. Чтобы выполнить это, теперь, когда вы нажимаете кнопку attach b2
вместо загрузки изображения, он загружает диалоговое окно предупреждения showDialog()
, чтобы спросить, какую вы хотите загрузить (видео или фотографию) после выбора, затем загружает изображение или селектор видео. Проблема возникает, когда вы вызываете метод doPositiveClick(Activity activity, int requestCode)
из внутреннего класса onActivityResult не запускается и данные не возвращаются. Я чувствую, что это связано с тем, что он вызван из внутреннего класса MyAlertDialogFragment
, но я не уверен, как с ним справиться. Спасибо.onActivityResult не является триггером из диалогового окна оповещений FIXED
public static final int REQUEST_CODE = 0, RESULT_PHOTO = 1, RESULT_VID = 2;
void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string.alert_dialog_two_buttons_title);
newFragment.setTargetFragment(ChatRoomFragment.this, REQUEST_CODE);
newFragment.show(getFragmentManager(), "dialog");
}
@Override
if(requestCode == REQUEST_CODE && data.getData() != null) {
Log.v("response", "Photo Selected");
Uri _uri = data.getData();
Log.v("response", "cp1/4");
Кодекс делает его к этой точке ^^^^ b2.setImageResource (R.drawable.picattached);
if (_uri != null) {
//User has pick an image.
Cursor cursor = getActivity().getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
//cursor.moveToFirst();
if (cursor == null){
uploadMsgPic = _uri.getPath();
Log.i("response", "cursor == null");
Log.i("response", "uploadMsgPic now = " + uploadMsgPic);
}else{
Log.i("response", "cursor = "+ cursor);
cursor.moveToFirst();
Log.v("response", "cp2/4");
//Link to the image
//cursor.moveToFirst();
final String imageFilePath = cursor.getString(0);
Log.i("response", "imageFilePath == " + imageFilePath);
Log.v("response", "cp3/4");
uploadMsgPic = imageFilePath;
Log.v("response", "4/4");
cursor.close();
if (uploadMsgPic == null)
uploadMsgPic = _uri.getPath();
}
Log.i("response", "uploadMsgPic == " + uploadMsgPic);
media_attached=true;
}
}
if(requestCode == 6 && data != null && data.getData() != null){
Uri _uri = data.getData();
Log.v("response", "cp1/4");
b2.setImageResource(R.drawable.picattached);
if (_uri != null) {
//User has pick an image.
Cursor cursor = getActivity().getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
//cursor.moveToFirst();
if (cursor == null){
uploadMsgPic = _uri.getPath();
Log.i("response", "cursor == null");
Log.i("response", "uploadMsgPic now = " + uploadMsgPic);
}else{
Log.i("response", "cursor = "+ cursor);
cursor.moveToFirst();
Log.v("response", "cp2/4");
//Link to the image
//cursor.moveToFirst();
final String imageFilePath = cursor.getString(0);
Log.i("response", "imageFilePath == " + imageFilePath);
Log.v("response", "cp3/4");
uploadMsgPic = imageFilePath;
Log.v("response", "4/4");
cursor.close();
if (uploadMsgPic == null)
uploadMsgPic = _uri.getPath();
}
Log.i("response", "uploadMsgPic == " + uploadMsgPic);
media_attached=true;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
//Generics:
//1. Long: Type of reference(s) passed to doInBackground()
//2. String: Type of reference passed to onProgressUpdate()
//3. STRING: Type of reference returned by doInBackground()
//Value passed to onPostExecute()
public static void doPositiveClick(Activity activity, int requestCode) {
Log.i("ChatRoomFragMent", "doPositive Clicked");
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
activity.startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_CODE);
// Do stuff here.
Log.i("ChatRoomFragMent", "picture selector loaded");
}
public void doNegativeClick() {
Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Video"), RESULT_VID);
// Do stuff here.
Log.i("FragmentAlertDialog", "Negative click!");
}
public static class MyAlertDialogFragment extends SherlockDialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
//.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton("Photo",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) { Intent data = new Intent();
//((FragmentAlertDialogSupport)getActivity()).doPositiveClick();
ChatRoomFragment.doPositiveClick(getActivity(), 5);
getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_PHOTO, data);
}
}
)
.setNegativeButton("Video",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//((FragmentAlertDialogSupport)getActivity()).doNegativeClick();
//doNegativeClick();
}
}
)
.create();
}
}
}
Священный код! Как насчет того, чтобы начать с * просто * ваш 'onActivtiyResult()' и ваш 'AlertDialog'? – codeMagic
Возможно, вы не вызываете super.onActivityResult() в своей реализации Activity.onActivityResult? – marcinj
извините. Я рубил его. – TWeeKeD