84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
公司几款app设置界面都有用户头像,功能一样:网络请求获取头像更新,点击头像弹出:拍照or相册,选择照片更新头像。
现在都是写在各自项目中,大量重复代码,现在需要重构,老大说把这个View写成通用控件(不是整个界面),但是点击View进入拍照或者相册,选择返回照片是在Activity的onActivityResult里处理,我在View里面无法重写这个方法啊 怎么弄???
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
这个问题当然是怎么方便怎么来, 但是要考虑App目前的框架:
按楼上说的用回调.但注意因为回调放在了被静态变量引用, 一般回调是匿名内部类, 可能会导致内存泄漏.
用事件总线. 也是实现中间层, 把结果通过事件总线传过来.
推荐: 既然是重构, 可以考虑让所有的控件都拥有获取onActivityResult结果的功能了. 定义一个接口, interface onActivityResult {
boolean onResult();
}需要监听回调的自定义控件实现该接口. 在BaseActivity里面, 记录这些控件, 当有结果返回时传给这些控件:class BaseActivity {
List<onActivityResult> resultViewList = new ArrayList(); void onCreate() { ResultView view = ...; resultViewList.add(view); } onActivityResult() { for (onActivityResult view : resultViewList) { boolean ret = view.onResult(); if (ret) { break; } } }
}这样就完全解决了控件需要拿到Activity结果的问题了.
以上为大概代码, 实际上还有考虑: requestCode 重复问题, 要保存所有的View.
通过listener的形式处理就可以了。
上面的说的不错 定义一个接口 用接口回调的方式来做 其他的通用的view 实现这个接口给就可以了
我们的做法是把拍照和相册写成一个Module,然后给设置头像的组件添加点击事件,点击跳转到处理的界面,然后返回。Module中不包含那个设置组件,由Module的使用者自己设置。还有一种做法就是楼上所说的通过事件监听,选择相册图片或者拍照确定图片后,触发这个listener。我建议你问问你老大,是否确定把那个入口View也写在Module中
搭建一个本地maven仓库,把这个控件,弹窗,跳转功能封装好。然后直接上传到本地maven仓库,之后再通过Gradle依赖到项目里去本地maven仓库搭建,配置Gradle,上传自己的library到仓库内
一般像一些基础功能的库都可以这么做,一个人维护即可
使用 onActivityResult 没问题呀,哔哩哔哩就是这样处理的 boxing;不想让调用者处理 onActivityResult,可以写个中间 Activity 处理完 onActivityResult,将结果通过回调传给调用者;或者自定义一个相机
onActivityResult
Activity
这类涉及到其他界面的逻辑我一般会写个独立的module,调用的时候使用接口,实现层用中间activity完成图片的选取/处理,最后通过回调返回。这些东西你甚至都不用自己写,GitHub上现成的轮子大把,随便找一个ImagePicker用就行了。
谢谢各位,这位回答基本是我的意思。 我的问题没说清楚,我重构不是想要打造通用头像控件,我要的是:这个头像view放到业务Activity的布局中 ,然后调用者其他什么都不需要做了。什么网络请求更新头像 上传头像 选照片...全部封装好,而不是回调给他自己处理,因为我们公司这几款app的 头像相关接口是通用的
这个问题当然是怎么方便怎么来, 但是要考虑App目前的框架:
按楼上说的用回调.但注意因为回调放在了被静态变量引用, 一般回调是匿名内部类, 可能会导致内存泄漏.
用事件总线. 也是实现中间层, 把结果通过事件总线传过来.
推荐:
既然是重构, 可以考虑让所有的控件都拥有获取onActivityResult结果的功能了. 定义一个接口,
interface onActivityResult {
}
需要监听回调的自定义控件实现该接口. 在BaseActivity里面, 记录这些控件, 当有结果返回时传给这些控件:
class BaseActivity {
}
这样就完全解决了控件需要拿到Activity结果的问题了.
以上为大概代码, 实际上还有考虑: requestCode 重复问题, 要保存所有的View.
通过listener的形式处理就可以了。
上面的说的不错 定义一个接口 用接口回调的方式来做 其他的通用的view 实现这个接口给就可以了
我们的做法是把拍照和相册写成一个Module,然后给设置头像的组件添加点击事件,点击跳转到处理的界面,然后返回。Module中不包含那个设置组件,由Module的使用者自己设置。
还有一种做法就是楼上所说的通过事件监听,选择相册图片或者拍照确定图片后,触发这个listener。
我建议你问问你老大,是否确定把那个入口View也写在Module中
搭建一个本地maven仓库,把这个控件,弹窗,跳转功能封装好。然后直接上传到本地maven仓库,之后再通过Gradle依赖到项目里去
本地maven仓库搭建,配置Gradle,上传自己的library到仓库内
一般像一些基础功能的库都可以这么做,一个人维护即可
使用
onActivityResult
没问题呀,哔哩哔哩就是这样处理的 boxing;不想让调用者处理
onActivityResult
,可以写个中间Activity
处理完onActivityResult
,将结果通过回调传给调用者;或者自定义一个相机
这类涉及到其他界面的逻辑我一般会写个独立的module,调用的时候使用接口,实现层用中间activity完成图片的选取/处理,最后通过回调返回。
这些东西你甚至都不用自己写,GitHub上现成的轮子大把,随便找一个ImagePicker用就行了。
谢谢各位,这位回答基本是我的意思。 我的问题没说清楚,我重构不是想要打造通用头像控件,我要的是:这个头像view放到业务Activity的布局中 ,然后调用者其他什么都不需要做了。什么网络请求更新头像 上传头像 选照片...全部封装好,而不是回调给他自己处理,因为我们公司这几款app的 头像相关接口是通用的