最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?Settings?跳轉(zhuǎn)流程方法詳解

 更新時(shí)間:2023年07月27日 10:53:49   作者:孤街酒客0911  
這篇文章主要為大家介紹了Android?Settings跳轉(zhuǎn)流程方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

點(diǎn)擊事件回調(diào)堆棧 

onPreferenceTreeClick()方法

我們知道在Settings中,各模塊的Fragment基本都繼承了DashboardFragment,當(dāng)有點(diǎn)擊事件時(shí),就會回調(diào)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()方法中可以根據(jù)preference的key做事件攔截,如果不會攔截,將會調(diào)用到父類InstrumentedPreferenceFragment的onPreferenceTreeClick()方法:

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

在該方法中,又將會調(diào)用到androidx中的PreferenceFragmentCompat方法中,由于androidx中源碼不開放,就不做分析,但下一步回將調(diào)到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()方法,啟動了對應(yīng)的空Activity,但在Setting中各模塊的Activity都時(shí)繼承SettingsActivity的。

執(zhí)行SettingsActivity中onCreate()方法

但對應(yīng)的空Activity啟動時(shí),就會回執(zhí)行SettingsActivity中onCreate()方法:

@Override  
    protected void onCreate(Bundle savedState) {  
        super.onCreate(savedState);  
        long startTime = System.currentTimeMillis();  
        //工廠類實(shí)現(xiàn)方法com.android.settings.overlay.FeatureFactoryImpl.java  
        final FeatureFactory factory = FeatureFactory.getFactory(this);  
        //獲取菜單信息的工廠類,實(shí)現(xiàn)類為DashboardFeatureProviderImpl.java  
        mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this);  
        mMetricsFeatureProvider = factory.getMetricsFeatureProvider();  
 // 第一步    從intent信息中獲取<meta-data/>標(biāo)簽名為"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);  
        //是否為快捷進(jìn)入方式(如從其它的應(yīng)用進(jìn)入Settings的某個設(shè)置項(xiàng))  
        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) 方法中加載相對應(yīng)的Fragment布局,(若注釋這句話:你會發(fā)現(xiàn) Activity 啟動了,卻沒有布局)。

以上就是Android Settings 跳轉(zhuǎn)流程方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Android Settings跳轉(zhuǎn)流程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

丰城市| 东平县| 郁南县| 民勤县| 阜阳市| 凤冈县| 韶关市| 巴东县| 璧山县| 甘洛县| 汝南县| 平凉市| 汉源县| 万载县| 武强县| 石渠县| 正阳县| 海城市| 陇南市| 枣阳市| 彰化市| 南充市| 来凤县| 科技| 桃园市| 宁陕县| 双鸭山市| 金寨县| 汪清县| 墨竹工卡县| 巫山县| 依安县| 开江县| 容城县| 连江县| 维西| 平远县| 卢氏县| 江华| 桦南县| 韶关市|