Fragment中startActivityForResult与onActivityResult详细解决方案

13 篇文章 0 订阅
10 篇文章 0 订阅

首先应该在Activity中用frament引用一下onActivityResult(),例如fragmentdemo. onActivityResult(),这里不用写父类的super. onActivityResult(),

<span style="white-space:pre">	</span>public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		<span style="color:#ff6666;">cuPhotoVoiceItem</span>.onActivityResult(requestCode, resultCode, data);
		Log.e(getClass().getName()+"onActivityResult", getClass().getName()+"onActiv<span style="white-space:pre">		</span>ityResult");
		
	}

这里要记住,fragmentdemo是继承了fragment的一个对象,在它相应的fragment类中要写onActivityResult的真正要跳转的具体类容,这里要写父类的super. onActivityResult(),

public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		<span style="color:#cccccc;background-color: rgb(255, 0, 0);">super.onActivityResult(requestCode, resultCode, data);</span>
		Log.e(getClass().getName()+"onActivityResult", getClass().getName()+"onActivityResult");
		if (resultCode == Activity.RESULT_OK && requestCode == 1) {
			Bundle b = new Bundle();
			b.putString("imagePath", photo1RealPath);
			Intent intent = new Intent(context, ChoosephotoActivity.class);
			flag = 1;
			intent.putExtras(b);
			((FragmentActivity) context).startActivityForResult(intent, 5);
		} else if (resultCode == Activity.RESULT_OK && requestCode == 2) {
			Bundle bundle = new Bundle();
			Uri uri = data.getData();

			String[] filePathColumn = { MediaStore.Images.Media.DATA };
			Log.e("picture", uri.toString());
			Cursor cursor = context.getContentResolver().query(uri,
					filePathColumn, null, null, null);
			cursor.moveToFirst();

			int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
			photo1RealPath = cursor.getString(columnIndex);
			cursor.close();
			bundle.putString("imagePath", photo1RealPath);
			Intent intent = new Intent(context, ChoosephotoActivity.class);
			flag = 2;
			intent.putExtras(bundle);
			((FragmentActivity) context).startActivityForResult(intent, 5);
		}

		else if (resultCode == Activity.RESULT_OK && requestCode == 3) {
			Bundle b1 = new Bundle();
			b1.putString("imagePath", photo2RealPath);
			Intent intent1 = new Intent(context, ChoosephotoActivity.class);
			flag = 1;
			intent1.putExtras(b1);
			((FragmentActivity) context).startActivityForResult(intent1, 6);
		} else if (resultCode == Activity.RESULT_OK && requestCode == 4) {
			Bundle bundle = new Bundle();
			Uri uri = data.getData();
			String[] filePathColumn = { MediaStore.Images.Media.DATA };
			Log.e("picture", uri.toString());
			Cursor cursor = context.getContentResolver().query(uri,
					filePathColumn, null, null, null);
			cursor.moveToFirst();

			int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
			photo2RealPath = cursor.getString(columnIndex);
			cursor.close();
			bundle.putString("imagePath", photo2RealPath);
			Intent intent = new Intent(context, ChoosephotoActivity.class);
			flag = 2;
			intent.putExtras(bundle);
			((FragmentActivity) context).startActivityForResult(intent, 6);
		} else if (resultCode == Activity.RESULT_OK && requestCode == 5) {
			photo1Path = data.getStringExtra("imagePath");
			photo1RealPath = Config.IMAGE_PATH + photo1Path;
		} else if (resultCode == Activity.RESULT_OK && requestCode == 6) {
			photo2Path = data.getStringExtra("imagePath");
			photo2RealPath = Config.IMAGE_PATH + photo2Path;
		} else if (resultCode == Activity.RESULT_OK && requestCode == 7) {
			voicePath = data.getStringExtra("voiceName");
			voiceTimeStr = data.getIntExtra("voiceTime", 0) + "'";
		}
		if (!photo1Path.equals("")) {
			badgeImage1.show();
			badgeImage1.setOnClickListener(badgeImage1Listener);
			ImageLoader.getInstance()
					.displayImage("file://" + Config.IMAGE_PATH + photo1Path,
							photo1, options);
			context.getResources().getDrawable(
					R.drawable.defect_compose_pic_add_highlighted);
			Log.e("获取到的photo1Path", "photo1Path"+photo1Path);
			photo2.setVisibility(View.VISIBLE);
			photo2.setOnClickListener(this);
		}
		if (!photo2Path.equals("")) {
			badgeImage1.show();
			badgeImage1.setOnClickListener(badgeImage2Listener);
			ImageLoader.getInstance()
					.displayImage("file://" + Config.IMAGE_PATH + photo2Path,
							photo2, options);
			Log.e("获取到的photo2Path", "photo2Path"+photo2Path);
		}

		if (!voicePath.equals("")) {
			voice.setBackground(context.getResources().getDrawable(
					R.drawable.record_voice));
			//initBadgeView(badgeVoice);
			badgeVoice.show();
			badgeVoice.setOnClickListener(badgeVoiceListener);
			voiceTime.setVisibility(View.VISIBLE);
			voiceTime.setText(voiceTimeStr + "'");
		}
	}


即这个继承了fragment的类里面的父类的onActivityResult()的实现是在执行父类的也就是Activity中的父类的onActivityResult()后,跳转到fragment中的这个onActivityResult().说白了,宿主(Activity)中的onActivityResult()只是一个跳转的中继点,在fragment中跳转的是真正的跳转点,并且在fragment中实现跳转或获取资源时前面要加context或向上转型为FragmentActivity,否则会出现错误:该fragment未绑定Activity.


刚开始我的错误就是在Activity中没有写onActivityResult(),然后一直报错:没有绑定activity。只是在fragment中写了onActivityResult,然后无论怎么该都没有进行onActivityResult里面的程序,也就是断点进不来,按一般网上说的就是说在Activity里面用一个fragment的对象,它首先不会实现fragment类里面的onActivityResult,也就是说会出现空指针错误,然后就是写了在Activity里面写了onActivityResult,但是没有用fragment对象来关联它,也就是说没有写fragmentdemo. onActivityResult();我只是照搬写了super. onActivityResult();其次,写好了这个,我们要在fragment类中用引用上下文,也就是与在之前的关联,建立起真正的完整联系,这样就能实现startActivityforResult与onActivityResult跳转了。

可能每个人遇到的问题不一样,我遇到的就是这样的,如果大家觉得我的方法有用,可以点个赞大笑,如果还有问题,可以交流一下~!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值