提交入库参数、采集数据优化
This commit is contained in:
@@ -249,6 +249,7 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
toast("每次只允许保存${MAX_COUNT}条数据")
|
toast("每次只允许保存${MAX_COUNT}条数据")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
showWaitingDialog2("加载中")
|
||||||
cameraUtils.takePhoto(cameraCallback)
|
cameraUtils.takePhoto(cameraCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,6 +288,7 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
val index = collectList.indexOfFirst { it.imageFile == null }
|
val index = collectList.indexOfFirst { it.imageFile == null }
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
toast("每次只允许保存${MAX_COUNT}条数据")
|
toast("每次只允许保存${MAX_COUNT}条数据")
|
||||||
|
showWaitingDialog2("加载中")
|
||||||
rerurn@ cameraCallback
|
rerurn@ cameraCallback
|
||||||
}
|
}
|
||||||
// toast("index=$index")
|
// toast("index=$index")
|
||||||
@@ -302,6 +304,7 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
FoodModule.bitmap2FloatArray(cropBitmap, false)
|
FoodModule.bitmap2FloatArray(cropBitmap, false)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
|
hideWaitingDialog()
|
||||||
toast("操作失败")
|
toast("操作失败")
|
||||||
return@let
|
return@let
|
||||||
}
|
}
|
||||||
@@ -309,6 +312,7 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
val filterList =
|
val filterList =
|
||||||
foodList.filter { it.score < FoodModule.BAG_RATE && it.name.contains("黑袋子") }
|
foodList.filter { it.score < FoodModule.BAG_RATE && it.name.contains("黑袋子") }
|
||||||
if (filterList.isNotEmpty()) {
|
if (filterList.isNotEmpty()) {
|
||||||
|
hideWaitingDialog()
|
||||||
toast("当前物品可能被袋子遮挡,请检查后重试")
|
toast("当前物品可能被袋子遮挡,请检查后重试")
|
||||||
return@let
|
return@let
|
||||||
}
|
}
|
||||||
@@ -333,9 +337,11 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
if (bitmap.isRecycled.not()) {
|
if (bitmap.isRecycled.not()) {
|
||||||
bitmap.recycle()
|
bitmap.recycle()
|
||||||
}
|
}
|
||||||
|
hideWaitingDialog()
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
|
hideWaitingDialog()
|
||||||
toast("程序异常${e.message}")
|
toast("程序异常${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -549,35 +555,40 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
/**
|
/**
|
||||||
* 显示等待提示框
|
* 显示等待提示框
|
||||||
*/
|
*/
|
||||||
fun showWaitingDialog(tip: String?): Dialog? {
|
fun showWaitingDialog(tip: String?) {
|
||||||
hideWaitingDialog()
|
runOnUiThread {
|
||||||
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
hideWaitingDialog()
|
||||||
if (!TextUtils.isEmpty(tip)) (view.findViewById<View?>(R.id.tvTip) as TextView).text = tip
|
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
||||||
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
if (!TextUtils.isEmpty(tip)) (view.findViewById<View?>(R.id.tvTip) as TextView).text = tip
|
||||||
mDialogWaiting!!.show()
|
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
||||||
mDialogWaiting!!.setCancelable(true)
|
mDialogWaiting!!.show()
|
||||||
return mDialogWaiting
|
mDialogWaiting!!.setCancelable(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 隐藏等待提示框
|
* 隐藏等待提示框
|
||||||
*/
|
*/
|
||||||
fun hideWaitingDialog() {
|
fun hideWaitingDialog() {
|
||||||
mDialogWaiting?.dismiss()
|
runOnUiThread {
|
||||||
mDialogWaiting = null
|
mDialogWaiting?.dismiss()
|
||||||
|
mDialogWaiting = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showWaitingDialog2(tip: String?) {
|
fun showWaitingDialog2(tip: String?) {
|
||||||
if (mDialogWaiting == null) {
|
runOnUiThread {
|
||||||
hideWaitingDialog()
|
if (mDialogWaiting == null) {
|
||||||
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
hideWaitingDialog()
|
||||||
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
||||||
mDialogWaiting!!.show()
|
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
||||||
mDialogWaiting!!.setCancelable(true)
|
mDialogWaiting!!.show()
|
||||||
|
mDialogWaiting!!.setCancelable(true)
|
||||||
|
}
|
||||||
|
val contentView = mDialogWaiting?.findViewById<ViewGroup>(android.R.id.content)
|
||||||
|
val tvTip = contentView?.findViewById<TextView>(R.id.tvTip)
|
||||||
|
tvTip?.text = tip
|
||||||
}
|
}
|
||||||
val contentView = mDialogWaiting?.findViewById<ViewGroup>(android.R.id.content)
|
|
||||||
val tvTip = contentView?.findViewById<TextView>(R.id.tvTip)
|
|
||||||
tvTip?.text = tip
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import com.sw.inbound.utils.ext.roundedDecimalPlace
|
|||||||
import com.sw.inbound.utils.ext.toJsonString
|
import com.sw.inbound.utils.ext.toJsonString
|
||||||
import com.sw.inbound.utils.ext.toast
|
import com.sw.inbound.utils.ext.toast
|
||||||
import com.sw.inbound.viewmodel.ReceiptViewModel
|
import com.sw.inbound.viewmodel.ReceiptViewModel
|
||||||
|
import com.sw.inbound.viewmodel.UserViewModel
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@@ -77,7 +78,8 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
var id: String = ""
|
var id: String = ""
|
||||||
var supplierId: String = ""
|
var supplierId: String = ""
|
||||||
lateinit var binding: ActivityGoodsListBinding
|
lateinit var binding: ActivityGoodsListBinding
|
||||||
val viewModel: ReceiptViewModel by viewModels()
|
val receiptViewModel: ReceiptViewModel by viewModels()
|
||||||
|
val userViewModel: UserViewModel by viewModels()
|
||||||
val goodsList: MutableList<GoodsInfo> = mutableListOf()
|
val goodsList: MutableList<GoodsInfo> = mutableListOf()
|
||||||
|
|
||||||
abstract fun initRecyclerView()
|
abstract fun initRecyclerView()
|
||||||
@@ -167,6 +169,8 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
|
|
||||||
//val array = arrayOf("1","2","qwe")
|
//val array = arrayOf("1","2","qwe")
|
||||||
//Timber.tag(TAG).d("测试:${array[2].toInt()}")
|
//Timber.tag(TAG).d("测试:${array[2].toInt()}")
|
||||||
|
|
||||||
|
userViewModel.getInitInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
private var weightCallback: ((weight: Int) -> Unit)? = null
|
private var weightCallback: ((weight: Int) -> Unit)? = null
|
||||||
@@ -346,7 +350,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
return@let
|
return@let
|
||||||
}
|
}
|
||||||
viewModel.recognizeGoodsList(
|
receiptViewModel.recognizeGoodsList(
|
||||||
//nameList = foodList,
|
//nameList = foodList,
|
||||||
scoreList = foodList,
|
scoreList = foodList,
|
||||||
) { goodsList ->
|
) { goodsList ->
|
||||||
@@ -488,7 +492,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
pageNo: Int,
|
pageNo: Int,
|
||||||
pageSize: Int = PAGE_SIZE
|
pageSize: Int = PAGE_SIZE
|
||||||
): List<SearchGoodsInfo.Record> {
|
): List<SearchGoodsInfo.Record> {
|
||||||
return viewModel.searchGoodsInfoList2(
|
return receiptViewModel.searchGoodsInfoList2(
|
||||||
goodsName = searchName,
|
goodsName = searchName,
|
||||||
pageNo = pageNo,
|
pageNo = pageNo,
|
||||||
pageSize = pageSize
|
pageSize = pageSize
|
||||||
@@ -562,7 +566,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
)
|
)
|
||||||
Timber.tag("SelfProcurementActivity")
|
Timber.tag("SelfProcurementActivity")
|
||||||
.d("receiptSubmit确认收货提交数据:${uploadInfo.toJsonString()}")
|
.d("receiptSubmit确认收货提交数据:${uploadInfo.toJsonString()}")
|
||||||
viewModel.confirmReceipt(uploadInfo) { success ->
|
receiptViewModel.confirmReceipt(uploadInfo) { success ->
|
||||||
if (success) {
|
if (success) {
|
||||||
toast("确认收货成功")
|
toast("确认收货成功")
|
||||||
finish()
|
finish()
|
||||||
@@ -597,7 +601,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
Timber.tag("SelfProcurementActivity")
|
Timber.tag("SelfProcurementActivity")
|
||||||
.d("selfProcurementSubmit自采入库提交数据:${submitData.toJsonString()}")
|
.d("selfProcurementSubmit自采入库提交数据:${submitData.toJsonString()}")
|
||||||
viewModel.addToWarehouse(submitData) { success ->
|
receiptViewModel.addToWarehouse(submitData) { success ->
|
||||||
if (success) {
|
if (success) {
|
||||||
toast("提交入库成功")
|
toast("提交入库成功")
|
||||||
finish()
|
finish()
|
||||||
@@ -618,13 +622,13 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
fun createNewGoods(file: File, param: GoodsAddParam, callback: (Boolean) -> Unit) {
|
fun createNewGoods(file: File, param: GoodsAddParam, callback: (Boolean) -> Unit) {
|
||||||
viewModel.uploadImage(file) { imgUrl ->
|
receiptViewModel.uploadImage(file) { imgUrl ->
|
||||||
if (imgUrl.isNullOrBlank()) {
|
if (imgUrl.isNullOrBlank()) {
|
||||||
toast("图片上传失败")
|
toast("图片上传失败")
|
||||||
return@uploadImage
|
return@uploadImage
|
||||||
}
|
}
|
||||||
param.relativeUrl = imgUrl
|
param.relativeUrl = imgUrl
|
||||||
viewModel.createNewGoods(param = param, callback = callback)
|
receiptViewModel.createNewGoods(param = param, callback = callback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -651,7 +655,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
val map = hashMapOf<String, RequestBody>()
|
val map = hashMapOf<String, RequestBody>()
|
||||||
map["goodsId"] = goodsId.toRequestBody()
|
map["goodsId"] = goodsId.toRequestBody()
|
||||||
map["goodsName"] = goodsName.toRequestBody()
|
map["goodsName"] = goodsName.toRequestBody()
|
||||||
viewModel.uploadMultipleImages(files = list, params = map)
|
receiptViewModel.uploadMultipleImages(files = list, params = map)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package com.sw.inbound.activity
|
package com.sw.inbound.activity
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import androidx.lifecycle.Lifecycle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.sw.inbound.adapter.ReceiptGoodsAdapter
|
import com.sw.inbound.adapter.ReceiptGoodsAdapter
|
||||||
import com.sw.inbound.model.response.DictType
|
import com.sw.inbound.model.response.DictType
|
||||||
import com.sw.inbound.utils.ext.gone
|
import com.sw.inbound.utils.ext.gone
|
||||||
import com.sw.inbound.utils.ext.toast
|
import com.sw.inbound.utils.ext.toast
|
||||||
import com.sw.inbound.utils.ext.visible
|
import com.sw.inbound.utils.ext.visible
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
class ReceiptActivity : GoodsListActivity() {
|
class ReceiptActivity : GoodsListActivity() {
|
||||||
|
|
||||||
@@ -42,7 +38,7 @@ class ReceiptActivity : GoodsListActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isNewReceipt.not()) {
|
if (isNewReceipt.not()) {
|
||||||
viewModel.getReceiveDetail(id) { detail ->
|
receiptViewModel.getReceiveDetail(id) { detail ->
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
if (detail == null) {
|
if (detail == null) {
|
||||||
toast("未查询到数据")
|
toast("未查询到数据")
|
||||||
|
|||||||
@@ -1,24 +1,21 @@
|
|||||||
package com.sw.inbound.adapter
|
package com.sw.inbound.adapter
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.CircleCropTransformation
|
|
||||||
import coil.transform.RoundedCornersTransformation
|
import coil.transform.RoundedCornersTransformation
|
||||||
import com.chad.library.adapter4.BaseQuickAdapter
|
import com.chad.library.adapter4.BaseQuickAdapter
|
||||||
import com.chad.library.adapter4.viewholder.QuickViewHolder
|
import com.chad.library.adapter4.viewholder.QuickViewHolder
|
||||||
import com.sw.inbound.R
|
|
||||||
import com.sw.inbound.databinding.ListItemFoodCollectionBinding
|
import com.sw.inbound.databinding.ListItemFoodCollectionBinding
|
||||||
import com.sw.inbound.objbox.FoodCollectionBean
|
import com.sw.inbound.objbox.FoodCollectionBean
|
||||||
import kotlin.let
|
import com.sw.inbound.utils.ext.gone
|
||||||
import kotlin.run
|
import com.sw.inbound.utils.ext.invisible
|
||||||
|
import com.sw.inbound.utils.ext.visible
|
||||||
|
|
||||||
class FoodCollectionAdapter (var list: MutableList<FoodCollectionBean>) :
|
class FoodCollectionAdapter(var list: MutableList<FoodCollectionBean>) :
|
||||||
BaseQuickAdapter<FoodCollectionBean, FoodCollectionAdapter.VH>(list) {
|
BaseQuickAdapter<FoodCollectionBean, FoodCollectionAdapter.VH>(list) {
|
||||||
|
|
||||||
inner class VH(var binding: ListItemFoodCollectionBinding) : QuickViewHolder(binding.root)
|
inner class VH(var binding: ListItemFoodCollectionBinding) : QuickViewHolder(binding.root)
|
||||||
@@ -32,24 +29,24 @@ class FoodCollectionAdapter (var list: MutableList<FoodCollectionBean>) :
|
|||||||
override fun onBindViewHolder(holder: VH, position: Int, item: FoodCollectionBean?) {
|
override fun onBindViewHolder(holder: VH, position: Int, item: FoodCollectionBean?) {
|
||||||
val binding = holder.binding
|
val binding = holder.binding
|
||||||
item?.let {
|
item?.let {
|
||||||
binding.ivFinish.visibility = if (it.isFinish) View.VISIBLE else View.GONE
|
binding.ivFinish.run {
|
||||||
binding.ivDelete.visibility = if (it.isShowCamera) View.GONE else View.VISIBLE
|
if (it.isFinish) visible() else gone()
|
||||||
binding.imageView.run {
|
}
|
||||||
if (it.isShowCamera) {
|
binding.ivDelete.run {
|
||||||
load(null)
|
if (it.isShowCamera) gone() else visible()
|
||||||
postDelayed({
|
}
|
||||||
scaleType = ImageView.ScaleType.CENTER
|
if (it.isShowCamera) {
|
||||||
setImageResource(R.mipmap.ic_camera256)
|
binding.imageView.invisible()
|
||||||
},100)
|
binding.ivCameraFlag.visible()
|
||||||
} else {
|
//binding.imageView.load(null)
|
||||||
|
} else {
|
||||||
|
binding.ivCameraFlag.invisible()
|
||||||
|
binding.imageView.run {
|
||||||
|
visible()
|
||||||
scaleType = ImageView.ScaleType.FIT_CENTER
|
scaleType = ImageView.ScaleType.FIT_CENTER
|
||||||
//setImageURI(it.imageUri)
|
|
||||||
// load(it.bitmap)
|
|
||||||
// setImageBitmap(it.bitmap!!)
|
|
||||||
//setImageURI(it.imageFile?.toUri())
|
|
||||||
load(it.imageFile?.toUri()) {
|
load(it.imageFile?.toUri()) {
|
||||||
crossfade(true)
|
crossfade(true)
|
||||||
transformations(RoundedCornersTransformation(5f,5f,5f,5f))
|
transformations(RoundedCornersTransformation(5f, 5f, 5f, 5f))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,8 +289,8 @@ class GoodsStoreDialog(
|
|||||||
context.toast("请采集图片")
|
context.toast("请采集图片")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val unit = binding.tvProcurementUnit.text.trim().toString()
|
val unitName = binding.tvProcurementUnit.text.trim().toString()
|
||||||
if (unit.isBlank()) {
|
if (unitName.isBlank()) {
|
||||||
context.toast("请选择入库单位")
|
context.toast("请选择入库单位")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -339,9 +339,9 @@ class GoodsStoreDialog(
|
|||||||
goodId = goods.id,
|
goodId = goods.id,
|
||||||
goodName = goods.goodsName,
|
goodName = goods.goodsName,
|
||||||
consumeValue = goods.purchaseValue,
|
consumeValue = goods.purchaseValue,
|
||||||
//goodsPurId = binding.tvProcurementUnit.tag.toString(),
|
goodsPurId = binding.tvProcurementUnit.tag.toString(),
|
||||||
kcUnitId = binding.tvProcurementUnit.tag.toString(),
|
kcUnitId = goods.unit,
|
||||||
unitName = unit,
|
unitName = unitName,
|
||||||
//收货接口-数量
|
//收货接口-数量
|
||||||
receivedNum = count,
|
receivedNum = count,
|
||||||
//收货接口-单价(含税)
|
//收货接口-单价(含税)
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ data class SearchGoodsInfo(
|
|||||||
*/
|
*/
|
||||||
val consumeValue: String? = "",
|
val consumeValue: String? = "",
|
||||||
val purchaseValue: String? = "",
|
val purchaseValue: String? = "",
|
||||||
|
val unit: String? = "",
|
||||||
|
|
||||||
@SerializedName("specification")
|
@SerializedName("specification")
|
||||||
val specification: String? = "",
|
val specification: String? = "",
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ fun HomeScreen(
|
|||||||
// 避免每次进入都获取字典类型
|
// 避免每次进入都获取字典类型
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
Timber.d("LaunchedEffect(Unit)")
|
Timber.d("LaunchedEffect(Unit)")
|
||||||
viewModel.getInitInfo()
|
// viewModel.getInitInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
BackHandler {
|
BackHandler {
|
||||||
|
|||||||
@@ -21,18 +21,18 @@ class UserViewModel @Inject constructor(
|
|||||||
private val repo: RemoteRepository
|
private val repo: RemoteRepository
|
||||||
) : BaseViewModel(repo) {
|
) : BaseViewModel(repo) {
|
||||||
|
|
||||||
private var isFirstLaunch by mutableStateOf(true)
|
// private var isFirstLaunch by mutableStateOf(true)
|
||||||
|
|
||||||
private val _user = MutableStateFlow<User?>(null)
|
private val _user = MutableStateFlow<User?>(null)
|
||||||
val user = _user.asStateFlow()
|
val user = _user.asStateFlow()
|
||||||
|
|
||||||
fun getInitInfo() {
|
fun getInitInfo() {
|
||||||
Timber.d("getInitInfo isFirstLaunch = $isFirstLaunch")
|
// Timber.d("getInitInfo isFirstLaunch = $isFirstLaunch")
|
||||||
//if (isFirstLaunch) {
|
//if (isFirstLaunch) {
|
||||||
|
|
||||||
getUserInfo()
|
// getUserInfo()
|
||||||
getDictType()
|
getDictType()
|
||||||
isFirstLaunch = false
|
// isFirstLaunch = false
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,14 @@
|
|||||||
android:id="@+id/imageView"
|
android:id="@+id/imageView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:scaleType="center"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ivCameraFlag"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
tools:src="@mipmap/ic_camera256"/>
|
android:src="@mipmap/ic_camera256"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/ivDelete"
|
android:id="@+id/ivDelete"
|
||||||
|
|||||||
Reference in New Issue
Block a user