【问题标题】:Android: SettingsActivity, confirm password?Android:SettingsActivity,确认密码?
【发布时间】:2014-08-03 22:12:52
【问题描述】:

我有一个设置活动,我有一个带有密码字段的编辑文本。 I 只包含 4 个数字和数字。

如何,当用户点击这个时,我可以让用户在输入新密码之前强制确认旧密码?

活动:

addPreferencesFromResource( R.xml.pref_general );

res/xml/pref_general.xml

<PreferenceCategory android:title="@string/settings_general">
    <EditTextPreference
            android:title="@string/settings_password"
            android:key="example_password"
            android:summary="****"
            android:textColor="@color/textColor"
            android:textColorHint="@color/hintColor"
            android:inputType="number"
            android:maxLength="4"
            />

</PreferenceCategory>

我怎样才能找到这些项目,以便我可以将我自己的 onClickListener's 放在它们上面?

编辑:我找到了这个方法,目前正在尝试解决这个问题..

private static Preference.OnPreferenceClickListener onPreferenceClickListener = new Preference.OnPreferenceClickListener() {

    @Override
    public boolean onPreferenceClick( Preference preference ) {
        return false;
    }

};

【问题讨论】:

    标签: android passwords settings


    【解决方案1】:

    你可以在你的 PreferenceActivity 中注册一个监听器:

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }
    
    @Override
    public void onPause() {    
        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }
    
    @Override
    public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) {
        Log.i("onSharedPreferenceChanged", "preference changed: " + key);
    }
    

    【讨论】:

    • 好的,我想我明白了。但是为什么在 onResume 和 onPause 上呢?这是否应该在每次访问活动时删除/添加侦听器?
    • 因为您应该尊重 Android Activity 生命周期。如果您忘记注销您的听众,它将被泄露。你也可以在 onStart()/onDestroy()
    • 我明白了。从这里,我如何添加我的确认步骤?
    【解决方案2】:

    我从另一个问题中注意到了这一点。

        Preference myPref = ( Preference ) findPreference( "password" );
        myPref.setOnPreferenceClickListener( new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick( Preference preference ) {
                Log.e("App", "password clicked!");
                return true;
            }
        } );
    

    有效!

    编辑:这可能必须在 onPostCreate() 方法中,因为它需要在您设置任何类型的侦听器(甚至找到对象)之前进行初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2012-01-19
      • 1970-01-01
      • 2013-09-18
      • 2015-04-03
      • 2023-02-23
      相关资源
      最近更新 更多