【问题标题】:Preference screen update summary for preference首选项屏幕更新摘要
【发布时间】:2019-12-16 06:21:34
【问题描述】:

我通过扩展 RingtonePrefernce 实现了自定义首选项。我确实重写了 getSummary 方法,该方法在 pref 更新时动态返回 pref 的值。

但问题是在主首选项屏幕上,关闭首选项时更新的值不会反映。 如果我向下/向上滚动主首选项屏幕并且当首选项离开屏幕并返回屏幕时,首选项摘要唯一一次在主屏幕中更新。所以基本上是在重绘的时候。

我该如何解决?

列出所有首选项的主性能屏幕代码

  public class MainActivity extends PreferenceActivity implements
            OnPreferenceClickListener, Preference.OnPreferenceChangeListener {

@SuppressLint("Deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SoundUtils.stopPlaying();

        ringtoneManager = new RingtoneManager(getApplicationContext());
        featureManager =  FeatureManager.getInstance(this);
        beepActionManager= new BeepActionManager();
        addPreferencesFromResource(R.xml.preferences_settings);
       //other code
  }
}

在preferences_settings中我的偏好被添加为

 <PreferenceCategory android:title="@string/sound_settings">
        <com.mindedges.beephourly.utils.CustomRintonePreference
            android:defaultValue="content://settings/system/notification_sound"
            android:key="ringtone_pref"
            android:ringtoneType="all"
            android:title="@string/hr_beep_tone_title"
            android:summary="@string/hr_beep_tone_summary"/>

        <com.mindedges.beephourly.utils.CustomRintonePreference


    </PreferenceCategory>

【问题讨论】:

  • 主屏是如何实现的?贴出它的代码或相关部分...
  • 请分享CustomRingtonePreference代码。

标签: android preference


【解决方案1】:

我检查了您的代码并创建了测试项目,找到了解决方案。 我认为您应该通知您的自定义首选项您已更改它。 “RingtonePreference”具有名为“onSaveRingtone”的回调方法,您需要在覆盖“onSaveRingtone”时调用“notifyChnaged”函数。 这是我测试的代码。

public class CustomPreference extends RingtonePreference {
    public CustomPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CustomPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomPreference(Context context) {
        super(context);
    }

    @Override
    protected void onSaveRingtone(Uri ringtoneUri) {
        super.onSaveRingtone(ringtoneUri);

        notifyChanged();
    }

    @Override
    public CharSequence getSummary() {
        return "Date " + System.currentTimeMillis();
    }
}

【讨论】:

    【解决方案2】:

    据我所知,PreferenceScreen 中的ListView 需要在PreferenceScreenonResume() 被调用时使用ListView.invalidate() 函数无效,在RingtonePreference 关闭之后。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2011-07-31
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多