繁体   English   中英

重启应用程序后防止对话框关闭

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM