Android?Settings?跳轉(zhuǎn)流程方法詳解
點擊事件回調(diào)堆棧

onPreferenceTreeClick()方法
我們知道在Settings中,各模塊的Fragment基本都繼承了DashboardFragment,當有點擊事件時,就會回調(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都時繼承SettingsActivity的。
執(zhí)行SettingsActivity中onCreate()方法
但對應(yīng)的空Activity啟動時,就會回執(zhí)行SettingsActivity中onCreate()方法:
@Override
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
long startTime = System.currentTimeMillis();
//工廠類實現(xiàn)方法com.android.settings.overlay.FeatureFactoryImpl.java
final FeatureFactory factory = FeatureFactory.getFactory(this);
//獲取菜單信息的工廠類,實現(xiàn)類為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);
//是否為快捷進入方式(如從其它的應(yīng)用進入Settings的某個設(shè)置項)
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)流程方法詳解的詳細內(nèi)容,更多關(guān)于Android Settings跳轉(zhuǎn)流程的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 自定義Button控件實現(xiàn)按鈕點擊變色
這篇文章給大家介紹了android 自定義Button控件實現(xiàn)按鈕點擊變色的代碼,本文給大家附有注釋,非常不錯,代碼簡單易懂,對android按鈕點擊變色的實現(xiàn)感興趣的朋友參考下吧2016-11-11
Android不使用自定義布局情況下實現(xiàn)自定義通知欄圖標的方法
這篇文章主要介紹了Android不使用自定義布局情況下實現(xiàn)自定義通知欄圖標的方法,實例分析了Android通知欄圖標的創(chuàng)建技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-12-12
Android界面 NotificationManager使用Bitmap做圖標
Android界面 NotificationManager使用Bitmap做圖標,如何實現(xiàn)呢,本文將介紹解決方法,需要的朋友可以參考下2012-12-12
Kotlin Service服務(wù)組件開發(fā)詳解
這幾天分析了一下的啟動過程,于是乎,今天寫一下Service使用; 給我的感覺是它并不復(fù)雜,千萬不要被一坨一坨的代碼嚇住了,雖然彎彎繞繞不少,重載函數(shù)一個接著一個,就向走迷宮一樣,但只要抓住主線閱讀,很快就能找到出口2022-12-12

