公司几款app设置界面都有用户头像,功能一样:网络请求获取头像更新,点击头像弹出:拍照or相册,选择照片更新头像。
现在都是写在各自项目中,大量重复代码,现在需要重构,老大说把这个View写成通用控件(不是整个界面),但是点击View进入拍照或者相册,选择返回照片是在Activity的onActivityResult里处理,我在View里面无法重写这个方法啊 怎么弄???
阿神2017-04-18 10:49:49
물론 이 질문은 편의성에 관한 것이지만 앱의 현재 프레임워크를 고려해야 합니다.
위에서 언급한 대로 콜백을 사용하세요. 그러나 콜백은 정적 변수에 의해 참조되므로 콜백은 일반적으로 익명의 내부 클래스이므로 메모리 누수가 발생할 수 있습니다.
이벤트 버스를 사용합니다. 또한 중간 계층을 구현하고 이벤트 버스를 통해 결과를 전송합니다.
권장사항:
리팩토링이므로 모든 컨트롤에 onActivityResult 결과를 얻는 기능을 허용하는 것을 고려할 수 있습니다.
interface onActivityResult {
}
콜백을 수신해야 하는 사용자 정의 컨트롤은 BaseActivity에서 이러한 컨트롤을 기록하고 결과가 반환될 때 이러한 컨트롤에 전달합니다.
class BaseActivity {
}
이렇게 하면 컨트롤이 Activity 결과를 얻는 데 필요한 문제가 완전히 해결됩니다.
위 내용은 대략적인 코드인데 사실 고려사항도 있습니다. requestCode가 반복되는 문제, 모든 View를 저장해야 한다는 점입니다.
大家讲道理2017-04-18 10:49:49
우리의 접근 방식은 사진 촬영 및 사진 앨범을 모듈로 작성한 다음 아바타를 설정하는 구성 요소에 클릭 이벤트를 추가하고 클릭하여 처리 인터페이스로 이동한 다음 돌아오는 것입니다. 설정 구성요소는 모듈에 포함되지 않으며 모듈 사용자가 설정합니다.
또 다른 방법은 위에서 언급한 이벤트 모니터링을 사용하는 것입니다. 앨범 사진을 선택하거나 사진을 찍어 사진을 확인한 후 이 리스너를 트리거합니다.
모듈에 입구 뷰를 쓸 자신이 있는지 상사에게 물어보는 것이 좋습니다
伊谢尔伦2017-04-18 10:49:49
로컬 maven 웨어하우스를 구축하고 컨트롤, 팝업 창, 점프 기능을 캡슐화합니다. 그런 다음 로컬 maven 웨어하우스에 직접 업로드하고 Gradle
을 통해 프로젝트에 의존합니다. 로컬 Maven 웨어하우스를 구축하고 Gradle을 구성한 후 자신만의 라이브러리를 창고
일반적으로 몇 가지 기본 기능을 갖춘 라이브러리에 대해 이 작업을 수행할 수 있으며, 한 사람이 유지관리할 수 있습니다
迷茫2017-04-18 10:49:49
onActivityResult
을 사용하는 것은 문제가 되지 않습니다. 이것이 Bilibili가 권투를 처리하는 방법입니다.
호출자가 onActivityResult
을 처리하는 것을 원하지 않으면 중간 Activity
을 작성하고 onActivityResult
을 처리한 후, 콜백을 통해 결과를 전달합니다.
또는 카메라를 맞춤설정합니다.
黄舟2017-04-18 10:49:49
다른 인터페이스가 포함된 이러한 로직의 경우 일반적으로 별도의 모듈을 작성합니다. 호출 시 구현 계층에서는 중간 활동을 사용하여 이미지 선택/처리를 완료하고 최종적으로 콜백을 통해 반환합니다. .
이런 것들을 직접 작성할 필요도 없습니다. GitHub에 기성 휠이 많이 있으므로 ImagePicker를 찾아서 사용하세요.
巴扎黑2017-04-18 10:49:49
모두들 감사합니다. 이 답변은 기본적으로 제가 의도한 내용입니다. 내 질문이 명확하지 않습니다. 내 리팩토링은 범용 아바타 컨트롤을 만드는 것이 아닙니다. 내가 원하는 것은 이 아바타 보기를 비즈니스 활동의 레이아웃에 넣는 것입니다. 그러면 호출자가 다른 작업을 수행할 필요가 없습니다. 아바타 업데이트, 아바타 업로드, 사진 선택 등의 네트워크 요청은 모두 캡슐화되어 있으며, 직접 처리하기 위해 다시 전화하는 대신 이러한 앱의 아바타 관련 인터페이스가 우리 회사에서 일반적이기 때문입니다