【问题标题】:How can I ensure that a user has filled all required fields in a PreferenceFragment before allowing them to back out?如何确保用户在允许他们退出之前填写了 PreferenceFragment 中的所有必填字段?
【发布时间】:2015-02-27 07:46:56
【问题描述】:

我有一个PreferenceFragment,里面有一些偏好。我的目的是确保用户填写此屏幕上的所有值(如果他们不填写他们可以离开,但如果您填写一个则需要全部填写)

我的第一个想法是我可以处理 onBackPressed 并检查 pref1、pref2、pref3,但事实证明 PreferenceFragments 不会引发 onBackPressed 甚至 onKeyDown 事件。

可以在主 Activity 中处理它,但是我从同一个 Activity 加载了几个这样的首选项片段,所以如果我可以在首选项片段本身中处理每个片段的逻辑是理想的。

如果有更好的方法来实现这一点,请解释一下。

【问题讨论】:

  • 从活动中处理。数据必须与视图分离。这是首先使用片段的一点。您的活动是控制器。您必须从那里进行检查。
  • @StephanBranczyk - 你是说 PreferenceFragment 构成一个视图并且 PreferenceActivity 类似于控制器吗?抱歉,这听起来很奇怪,或者我错过了什么,design philosophy 表明它的逻辑应该尽可能地被封装。

标签: android back preferencefragment


【解决方案1】:

是的,您可以在 Fragment 中处理这一切。

我将笼统地说,因为您似乎不是新手开发人员。

  1. 在您的活动的任何方法中提供对片段实例的回调,表明用户想要关闭您的PreferenceFragment,如下所示:

    // The callback returns true if the user is allowed to exit the
    // preference screen and false otherwise
    // The PrefenceFragment will have to implement this interface/callback
    
    @Override
    public void onBackPressed() {
        if (mBackPressedCallback.onBackPressed)
            super.onBackPressed()
        ; else
            Toast.makeText("Fill in required prefence", Toast.LENGTH_SHORT).show
            OR
            SnackBar.makeText(...).show
        ;
    }
    
  2. 在与您的偏好文件关联的SharedPrefences 上添加OnSharedPrefenceChangeListener。在此处查看操作方法。

  3. 创建一个布尔数组(或使用其他数据结构)以确定用户何时满意地更改了感兴趣的偏好

  4. 当收到onBackPressed回调时,检查数组/数据结构是否满意,如果是则返回true,否则返回false

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多