项目地址:https://github.com/zhihu/Matisse
前提:fragment想要获取activity的返回值,需要用Fragment自带的fragment.startActivityForResult()方法启动activity,并重写 onActivityResult() 获取到返回数据
fragment中使用(注意在fragment中使用,Matisse.from()的传参是Fragment,不是activity,官方文档没找到传fragment这个信息,这个我是查看源码才发现的,之前一直获取不到返回值,就是这个参数传错了):
Matisse内部 启动MatisseActivity的源码:
Matisse.from(Fragment.this)
.choose(MimeType.ofImage(), false)
.countable(true)
.capture(true)
.captureStrategy(
new CaptureStrategy(true, "com.dingli.muck.fileprovider", "test"))
.maxSelectable(1)
.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
.gridExpectedSize(
mActivity.getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
.thumbnailScale(0.85f)
.imageEngine(new GlideEngine())
.setOnSelectedListener((uriList, pathList) -> {
Log.e("onSelected", "onSelected: pathList=" + pathList);
})
.showSingleMediaType(true)
.originalEnable(true)
.maxOriginalSize(10)
.autoHideToolbarOnSingleTap(true)
.setOnCheckedListener(isChecked -> {
Log.e("isChecked", "onCheck: isChecked=" + isChecked);
})
.forResult(REQUEST_CODE_CHOOSE);
fragment中重写onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("", "");
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
List<Uri> uris = Matisse.obtainResult(data);
List<String> paths = Matisse.obtainPathResult(data);
Log.e("OnActivityResult ", String.valueOf(Matisse.obtainOriginalState(data)));
}
}
fragment中使用注意就这点坑,记录下,后面有问题再补充吧