Android Settings 跳转流程方法详解

 更新时间:2023年07月27日 10:53:49   作者:孤街酒客0911  
这篇文章主要为大家介绍了Android Settings跳转流程方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

点击事件回调堆栈 

onPreferenceTreeClick()方法

我们知道在Settings中,各模块的Fragment基本都继承了DashboardFragment,当有点击事件时,就会回调DashboardFragment中的onPreferenceTreeClick()方法:

 @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        final Collection<List<AbstractPreferenceController>> controllers =
                mPreferenceControllers.values();
        for (List<AbstractPreferenceController> controllerList : controllers) {
            for (AbstractPreferenceController controller : controllerList) {
                if (controller.handlePreferenceTreeClick(preference)) {
                    // log here since calling super.onPreferenceTreeClick will be skipped
                    writePreferenceClickMetric(preference);
                    return true;
                }
            }
        }
        return super.onPreferenceTreeClick(preference);
    }

在onPreferenceTreeClick()方法中可以根据preference的key做事件拦截,如果不会拦截,将会调用到父类InstrumentedPreferenceFragment的onPreferenceTreeClick()方法:

    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        writePreferenceClickMetric(preference);
        return super.onPreferenceTreeClick(preference);
    }

在该方法中,又将会调用到androidx中的PreferenceFragmentCompat方法中,由于androidx中源码不开放,就不做分析,但下一步回将调到SettingsActivity中的onPreferenceStartFragment()方法:

    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        new SubSettingLauncher(this)
                .setDestination(pref.getFragment())
                .setArguments(pref.getExtras())
                .setSourceMetricsCategory(caller instanceof Instrumentable
                        ? ((Instrumentable) caller).getMetricsCategory()
                        : Instrumentable.METRICS_CATEGORY_UNKNOWN)
                .setTitleRes(-1)
                .launch();
        return true;
    }

在该方法中由SubSettingLauncher类里面的launch()方法,启动了对应的空Activity,但在Setting中各模块的Activity都时继承SettingsActivity的。

执行SettingsActivity中onCreate()方法

但对应的空Activity启动时,就会回执行SettingsActivity中onCreate()方法:

@Override  
    protected void onCreate(Bundle savedState) {  
        super.onCreate(savedState);  
        long startTime = System.currentTimeMillis();  
        //工厂类实现方法com.android.settings.overlay.FeatureFactoryImpl.java  
        final FeatureFactory factory = FeatureFactory.getFactory(this);  
        //获取菜单信息的工厂类,实现类为DashboardFeatureProviderImpl.java  
        mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this);  
        mMetricsFeatureProvider = factory.getMetricsFeatureProvider();  
 // 第一步    从intent信息中获取<meta-data/>标签名为"com.android.settings.FRAGMENT_CLASS"的值(下文用于加载Fragment的类名)  
        getMetaData();  
 // 第二步
      final Intent intent = getIntent();
      if (intent.hasExtra(EXTRA_UI_OPTIONS)) {
          getWindow().setUiOptions(intent.getIntExtra(EXTRA_UI_OPTIONS, 0));
      }
        //获取上面getMetaData()得到的类名  
        final String initialFragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT);  
        //是否为快捷进入方式(如从其它的应用进入Settings的某个设置项)  
        mIsShortcut = isShortCutIntent(intent) || isLikeShortCutIntent(intent) ||  
                intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, false);  
        ... ...  
        if (savedState != null) {  
          ... ...  
        } else {  
 //  第三步   加载布局  
            launchSettingFragment(initialFragmentName, isSubSettings, intent);  
        }  
        ... ...  
    } 

最终在 launchSettingFragment(initialFragmentName, isSubSettings, intent) 方法中加载相对应的Fragment布局,(若注释这句话:你会发现 Activity 启动了,却没有布局)。

以上就是Android Settings 跳转流程方法详解的详细内容,更多关于Android Settings跳转流程的资料请关注脚本之家其它相关文章!

相关文章

  • Android编程实现二维码的生成与解析

    Android编程实现二维码的生成与解析

    这篇文章主要介绍了Android编程实现二维码的生成与解析方法,结合实例分析了Android二维码的生成与读取二维码的相关技巧,并提供了二维码jar包供读者下载,需要的朋友可以参考下
    2015-11-11
  • Android开发实例之登录界面的实现

    Android开发实例之登录界面的实现

    本文主要介绍Android 登录界面实现,这里主要讲解类似Twitter的登录界面的实现,有兴趣的小伙伴可以参考下
    2016-08-08
  • Android RecyclerView添加FootView和HeadView

    Android RecyclerView添加FootView和HeadView

    这篇文章主要介绍了Android RecyclerView添加FootView和HeadView的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Android Studio报错unable to access android sdk add-on list解决方案

    Android Studio报错unable to access android sdk add-on list解决方案

    这篇文章主要介绍了Android Studio报错unable to access android sdk add-on list解决方案,本文通过多种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Android Retrofit2网路编程实现方法详解

    Android Retrofit2网路编程实现方法详解

    这篇文章主要介绍了Android Retrofit2网路编程实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Android如何实现设备的异显功能详解

    Android如何实现设备的异显功能详解

    这篇文章主要给大家介绍了关于Android如何实现设备的异显功能的相关资料,这篇文章通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Android 日期和时间的使用实例详解

    Android 日期和时间的使用实例详解

    这篇文章主要介绍了Android 日期和时间的使用实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • Android实现多线程断点续传

    Android实现多线程断点续传

    这篇文章主要为大家详细介绍了Android实现多线程断点续传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Android使用线程获取网络图片的方法

    Android使用线程获取网络图片的方法

    这篇文章主要为大家详细介绍了Android使用线程获取网络图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • flutter 屏幕尺寸适配和字体大小适配的实现

    flutter 屏幕尺寸适配和字体大小适配的实现

    这篇文章主要介绍了flutter 屏幕尺寸适配和字体大小适配的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论