zoukankan      html  css  js  c++  java
  • Preference如何增加在activity生命周期监听器

    转载请注明出处:http://blog.csdn.net/droyon/article/details/41313115

    本文主要介绍Preference凭什么Activit一些逻辑的生命周期,使。

    1、Preference它是android中的一个基本控件,在Preference以下派生出了SwitchPreference,CheckBoxPreference、ListPreference等众多的控件。

    这些控件作为一个结构体,被ListView载入。并依照Preference中自己定义的布局结构inflate出来各种布局。

    比如:Preference:

    protected View onCreateView(ViewGroup parent) {
            final LayoutInflater layoutInflater =
                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            
            final View layout = layoutInflater.inflate(mLayoutResId, parent, false); 
            
            final ViewGroup widgetFrame = (ViewGroup) layout
                    .findViewById(com.android.internal.R.id.widget_frame);
            if (widgetFrame != null) {
                if (mWidgetLayoutResId != 0) {
                    layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
                } else {
    //                widgetFrame.setVisibility(View.GONE);
                }
            }
            return layout;
        }
    其它的派生控件,mLayoutResId并无不同,可是字控件多了一些别的控件,比如:SwitchPreference多了一个Switch开关,CheckBoxPreference控件多了一个CheckBox控件。这写多出来的控件,是由mWidgetLayoutResId来控制的。也就是说,mLayoutResId在Preference以及其自控件中并无不同。不同的地方是不同的控件的mWidgetLayoutResId不同。

    对于PreferenceActivity:

    我们一般在PreferenceActivity的addPreferencesFromResource()方法中进行Preference的实例化。故而addPreferencesFromResource的运行时机等同于onCreateView的运行时机。

    对于PreferenceFragment:

    我们会在其onActivityCreate方法后运行bingPreference,也就是说bindPreference等同于onCreateView方法的运行。

    我们一般在onCreate、onStart或者onResume中进行addPreferenceFromResource方法。

    故而:我们能够这样觉得,onCreate、onStart、onResume后我们会调用Preference的构造函数、onCeateView、onBindView方法。

    2、当Activity运行到onStop或者onDestory方法时。我们应怎样应对?

    Preference能够实现PreferenceManager.OnActivityStopListener接口,而且在Preference内部运行怎样注冊:

    getPreferenceManager().registerOnActivityStopListener(this);
    那么含有Preference的页面在运行到onStop时,Preference就会回调运行onActivityStop方法。onDestory同理。

    其逻辑支持例如以下:

    PreferenceActivity:

    @Override
        protected void onStop() {
            super.onStop();
    
            if (mPreferenceManager != null) {
                mPreferenceManager.dispatchActivityStop();
            }
        }
    PreferenceFragment:

    @Override
        public void onStop() {
            super.onStop();
            mPreferenceManager.dispatchActivityStop();
            mPreferenceManager.setOnPreferenceTreeClickListener(null);
        }
    他们都会调用PreferenceManager的
    dispatchActivityStop();
    方法:

    void dispatchActivityStop() {
            List<OnActivityStopListener> list;
            
            synchronized (this) {
                if (mActivityStopListeners == null) return;
                list = new ArrayList<OnActivityStopListener>(mActivityStopListeners);
            }
    
            final int N = list.size();
            for (int i = 0; i < N; i++) {
                list.get(i).onActivityStop();
            }
        }


    onDestory同样的方法。



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    for是个什么玩意
    面向对象 多态
    面向对象 接口
    面向对象oop
    面向对象基本
    java修饰符的作用范围
    static 关键字介绍
    JsonLayout log4j2 json格式输出日志
    多线程--Thread.join方法
    idea常用实用快捷键
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4913448.html
Copyright © 2011-2022 走看看