Android 除了ViewModel,片段和活动之间的公共上下文相关代码应该保存在哪里?
我正在创建这个新的android应用程序,我被困在这个思考过程中。我有一个活动,它有一个底页,你可以选择从图库或相机中选取图像,将附件添加到帖子中。所以我需要请求权限,监听权限回调,解析画廊/摄像机的结果,切换UI,这需要很多代码。问题是我有一个片段,它的作用与上传个人资料图片完全相同。如果是两个活动,我可以将代码添加到baseActivity中。但这只是一个片段和一个活动。另一方面,也不应该膨胀ViewModel,这两个组件是完全独立的 我曾想过将其放在ViewModel中,但无法将视图放在其中。 而且,我知道这是一个常见的要求。 我知道演示者模式,但您仍然无法将视图放入其中Android 除了ViewModel,片段和活动之间的公共上下文相关代码应该保存在哪里?,android,oop,mvvm,kotlin,mvp,Android,Oop,Mvvm,Kotlin,Mvp,我正在创建这个新的android应用程序,我被困在这个思考过程中。我有一个活动,它有一个底页,你可以选择从图库或相机中选取图像,将附件添加到帖子中。所以我需要请求权限,监听权限回调,解析画廊/摄像机的结果,切换UI,这需要很多代码。问题是我有一个片段,它的作用与上传个人资料图片完全相同。如果是两个活动,我可以将代码添加到baseActivity中。但这只是一个片段和一个活动。另一方面,也不应该膨胀ViewModel,这两个组件是完全独立的 我曾想过将其放在ViewModel中,但无法将视图放在其
// starting gallery
private fun startGallery(type: String, title: String, requestCode: Int){
val intent = Intent()
intent.type = type
intent.action = Intent.ACTION_PICK
startActivityForResult(Intent.createChooser(intent, title),
requestCode)
}
// starting camera intent
private fun startCameraFor(action: String, requestCode: Int) {
val takeVideoIntent = Intent(action)
if (takeVideoIntent.resolveActivity(context?.packageManager) != null)
{
startActivityForResult(takeVideoIntent, requestCode)
}
}
// Handling image results
override fun onActivityResult(requestCode: Int, resultCode: Int, data:
Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == Activity.RESULT_OK) {
postViewModel.uploadImageResults(data = data, requestCode =
requestCode, userId = "c7c2352b-5449-43bf-a099-688843025130")
}
toggleBottomSheet()
}
// Check for permission
private fun permissionAction(permission: String =
Manifest.permission.READ_EXTERNAL_STORAGE, callback: () -> Unit){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
val checkPermission = ContextCompat.checkSelfPermission(context!!,
permission)
if (checkPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity!!,
arrayOf(permission), Constants.REQUEST_CODE_STORAGE_PICK)
} else {
callback()
}
}
}
// Toggles bottom sheet
private fun toggleBottomSheet() {
if(bottomSheet.state == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheet.state = BottomSheetBehavior.STATE_EXPANDED
} else {
bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED
}
}
您不需要对
ACTION\u GET\u CONTENT
或ACTION\u IMAGE\u CAPTURE
具有运行时权限(后者只要您的清单中没有CAMERA
权限)。运行时权限用于从存储中拾取它。无论如何,这不是我问的问题。我问的问题与OOPs和结构设计有关。如果从ACTION\u get\u CONTENT
返回的URI具有URI权限,则不需要这些URI的存储权限。我测试了这一点,是的,如果确实使用ACTION\u get\u CONTENT
,则不需要运行时权限。对上述问题有什么想法吗?活动和片段具有相同的视图和相同的代码来显示底部工作表?有没有办法消除冗余?您不需要对操作\u获取\u内容
或操作\u图像捕获
具有运行时权限(后者只要您的清单中没有摄像头
权限)。运行时权限用于从存储中拾取。无论如何,这不是我问的问题。我问的问题与OOPs和结构设计有关。如果从ACTION\u get\u CONTENT
返回的URI具有URI权限,则不需要这些URI的存储权限。我测试了这一点,是的,如果确实使用ACTION\u get\u CONTENT
,则不需要运行时权限。对上述问题有什么想法吗?活动和片段具有相同的视图和相同的代码来显示底部工作表?有没有办法消除冗余?