Android的PreferenceActivity中的getPreferenceScreen().removeAll()只删除组件

原创 2015年07月09日 18:01:19


Android的PreferenceActivity中的getPreferenceScreen().removeAll()只删除组件

如题,我们在Android中创建一个MyPreferenceActivity继承PreferenceActivity,然后在onCreate()方法中addPreferencesFromResource(R.xml.mypref);代码如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getApplicationContext();
        addPreferencesFromResource(R.xml.mypref);
        manager = getPreferenceManager();
//        listPreference = (ListPreference) manager.findPreference("mylist");
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        listPreference.setSummary(listPreference.getEntry() + ":" + listPreference.getValue());
        Toast.makeText(getApplicationContext(), listPreference.getEntry() + "的值为:" + listPreference.getValue(), Toast.LENGTH_SHORT).show();
    }

如果调用getPreferenceScreen().removeAll(),则只删除了当中的组件,而没有删除数据。代码如下:

 @Override
    protected void onStop() {
        super.onStop();
        getPreferenceScreen().removeAll();
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        Toast.makeText(getApplicationContext(), listPreference + "的值1为:" + listPreference, Toast.LENGTH_SHORT).show();
        Log.e("Test", "onStop1 " + listPreference);
        addPreferencesFromResource(R.xml.mypref);
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        Toast.makeText(getApplicationContext(), listPreference.getEntry() + "的值2为:" + listPreference.getValue(), Toast.LENGTH_SHORT).show();
        Log.e("Test", "onStop2 " + listPreference.getEntry());

        Log.e("Test", "onStop clear");
    }

打印log如下:
07-09 17:56:00.448  19857-19857/jehu.com.mypreference E/Test﹕ Main onPause
07-09 17:56:00.959  19857-19857/jehu.com.mypreference E/Test﹕ Main onStop
07-09 17:57:22.856  19857-19857/jehu.com.mypreference E/Test﹕ onStop 1null
07-09 17:57:22.866  19857-19857/jehu.com.mypreference E/Test﹕ onStop2 C#
07-09 17:57:22.866  19857-19857/jehu.com.mypreference E/Test﹕ onStop clear
07-09 17:57:22.866  19857-19857/jehu.com.mypreference E/Test﹕ onDestroy


我们发现

07-09 17:57:22.856  19857-19857/jehu.com.mypreference E/Test﹕ onStop1 null
07-09 17:57:22.866  19857-19857/jehu.com.mypreference E/Test﹕ onStop2 C#

原因是删除组件后,第一次打印null,但是数据还在,则再次加载组件后,第二次打印则为持久化到本地的数据。

完整代码:

package jehu.com.mypreference;

import android.content.Context;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;

/**
 * Created by admin on 2015/7/9.
 */
public class MyPreferenceActivity extends PreferenceActivity {
    private PreferenceManager manager;
    private ListPreference listPreference;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getApplicationContext();
        addPreferencesFromResource(R.xml.mypref);
        manager = getPreferenceManager();
//        listPreference = (ListPreference) manager.findPreference("mylist");
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        listPreference.setSummary(listPreference.getEntry() + ":" + listPreference.getValue());
        Toast.makeText(getApplicationContext(), listPreference.getEntry() + "的值为:" + listPreference.getValue(), Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onStop() {
        super.onStop();
        getPreferenceScreen().removeAll();
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        Toast.makeText(getApplicationContext(), listPreference + "的值1为:" + listPreference, Toast.LENGTH_SHORT).show();
        Log.e("Test", "onStop1 " + listPreference);
        addPreferencesFromResource(R.xml.mypref);
        listPreference = (ListPreference) manager.findPreference(context.getString(R.string.list_key));
        Toast.makeText(getApplicationContext(), listPreference.getEntry() + "的值2为:" + listPreference.getValue(), Toast.LENGTH_SHORT).show();
        Log.e("Test", "onStop2 " + listPreference.getEntry());

        Log.e("Test", "onStop clear");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("Test", "onDestroy");
    }
}


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    android:key="123"
    xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
    android:key="@string/list_key"
    android:title="请选择一个选项"
    android:summary="选项"
    android:entries = "@array/entries"
    android:entryValues="@array/values" />

</PreferenceScreen>

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android软件开发之PreferenceActivity中的组件

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xys289187120.blog.51cto.com/3361352/65678...

Android软件开发之PreferenceActivity中的组件

Android软件开发之PreferenceActivity中的组件 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www...

Android软件开发之PreferenceActivity中的组件(二十八)

Android软件开发之PreferenceActivity中的组件雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyuson...

Android软件开发之PreferenceActivity中的组件(二十八)

Android软件开发之PreferenceActivity中的组件 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www...

Android软件开发之PreferenceActivity中的组件

转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6727334   1.Prefere...

JavaScript Array模拟C#list RemoveAll实现删除符合条件的元素

作为一个跨平台多语言编程爱好者的我来说,当我用了一次C#list 的linq的RemoveAll后,再敲JavaScript 的数组想也用这个方法才发现这语言压根是弱爆了,不得已准备自己实现一下JS的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)