[英]Prevent dialog from closing after restarting application
我正在实施一个对话并有一个问题。 我设置了一个 10 分钟的计时器。 在 10 分钟内,用户无法使用该应用程序。 他们只能看到一个对话框,告诉他们还剩多长时间。 当他们终止并重新启动应用程序时,他们只能看到相同的对话框。 当用户重新启动应用程序时,如何防止对话框关闭或再次显示?
谢谢您的帮助。
我的布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.OtpTimeLimitViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/my_information_button">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="15dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="20dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="message1"
android:textColor="@android:color/white"
android:textSize="@dimen/text_size_tab_bar"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/content_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:text="message2"
android:textColor="@color/dark_gray"
android:textSize="@dimen/text_size_helper"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_text" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/timeLimit_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@{viewModel.timeLimit}"
android:textColor="@color/white"
android:textSize="40sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/content_text" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
分段
class OtpTimeLimitFragment : DialogFragment() {
private lateinit var binding: DialogOtpLimitBinding
private lateinit var viewModel: OtpTimeLimitViewModel
private lateinit var mContext: MainActivity
private val args : AgreementViewDialogArgs by navArgs()
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context as MainActivity
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
binding = DataBindingUtil.inflate(inflater, R.layout.dialog_otp_limit, container, false)
dialog?.setCanceledOnTouchOutside(false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(OtpTimeLimitViewModel::class.java)
binding.viewModel = viewModel
}
}
这是您需要做的粗略示例:
首先,Store value 是这样的:
var pref: SharedPreferences? = requireContext().getSharedPreferences("otpTrialLimit", MODE_PRIVATE)
pref?.edit()?.putLong("endTime", endTime)
pref?.edit()?.commit()
当用户重新打开应用程序时,然后在
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(OtpTimeLimitViewModel::class.java)
binding.viewModel = viewModel
val sharedPreference = getSharedPreferences("otpTrialLimit",Context.MODE_PRIVATE)
sharedPreference.getLong("endTime", 0)
if(System.currentTimeMillis() < endTime){
//Show dialog here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.