我有一个片段(A),其中有3个操作可用。当用户选择一个操作时,在执行此操作之前,我需要询问他用于登录的密码。我想使用BottomSheetDialogFragment来做这件事,但是我不知道如何让片段A监听输入的密码是否正确。
这是BottomSheetDialogFragment的代码
class ConfirmPasswordBottomSheet : BottomSheetDialogFragment() {
companion object {
const val TAG = "ConfirmPasswordBottomSheet"
}
fun newInstance(): ConfirmPasswordBottomSheet {
return ConfirmPasswordBottomSheet()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NORMAL, R.style.CartissimaSheetDialogTheme)
}
@Inject
lateinit var sharedPreferences: SharedPreferences
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.bottom_confirm_pwd, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
showKeyboard()
confirm_pwd_btn.setOnClickListener {
if(DesEncrypted().encrypt(confirm_pwd_edit.text.toString()) == ServiceUtils.getPassword(sharedPreferences)){
}
}else{
with(requireActivity() as MainActivity) {
buildAlertMessageOneButton(
getString(R.string.common_warning),
getString(R.string.incorrect_password),
getString(R.string.common_close)
)
}
}
}
}
}这是片段A中我需要检查密码的地方(在两个if之间)
show_pin_btn_float.setOnClickListener {
if (with(activity as MainActivity) { checkCardPermission(PinOptionFragment.card.authorities[AuthoritiesCardEnum.CARTE_VIEW_PIN]!!) }) {
if (card.driverPin) {
cardViewModel.requestPinDriver(with(activity as MainActivity) { currentUser.mainCode })
} else {
cardViewModel.requestPin(card.pan)
}
}
}发布于 2021-01-26 20:02:03
您必须使用一个接口来执行此任务。基于您提供的代码,下面给出了一个简单的用例。
首先在ConfirmPasswordBottomSheet中创建一个监听器,如下所示:
class ConfirmPasswordBottomSheet : BottomSheetDialogFragment() {
private lateinit var listener: OnActionCompleteListener
fun setOnActionCompleteListener(listener: OnActionCompleteListener) {
this.listener = listener
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// your other code here
confirm_pwd_btn.setOnClickListener {
// pass the value of password here
listener.onActionComplete("your password is this")
}
}
// your other code here
interface OnActionCompleteListener {
fun onActionComplete(str: String)
}
}然后,在创建ConfirmPasswordBottomSheet的实例之后,您必须通过传递OnActionCompleteListener的实例来调用setOnActionCompleteListener()。
创建一个想要使用的实例,如下所示:
val listener = object: ConfirmPasswordBottomSheet.OnActionCompleteListener() {
fun onActionComplete(str: String) {
// do what you want to do here because this block will be invoked in bottom sheet
// you will receive "your password is this" here
// as per question maybe check your password / pin
if (with(activity as MainActivity) { checkCardPermission(PinOptionFragment.card.authorities[AuthoritiesCardEnum.CARTE_VIEW_PIN]!!) }) {
if (card.driverPin) {
cardViewModel.requestPinDriver(with(activity as MainActivity) { currentUser.mainCode })
} else {
cardViewModel.requestPin(card.pan)
}
}
}
}创建接口实例后,必须将其设置为片段(A)中的ConfirmPasswordBottomSheet实例,如下所示:
val bottomSheet = ConfirmPasswordBottomSheet()
bottomSheet.setOnActionCompleteListener(listener)注意:这段代码未经测试,可能需要进行一些修改,因为它出乎我的意料。
发布于 2021-01-26 19:58:20
通过方法使用接口
public interface PasswordCheck {
fun isSuccess(password : Boolean);
}在底部的表单构造函数中传递接口。
然后在您的片段中调用它,如下所示:
val callback = object : PasswordCheck {
override fun isSuccess(password : Boolean) {
if(password){
//do what you want
}
}
}https://stackoverflow.com/questions/65900597
复制相似问题