android Launcher——資料載入與變更

來源:互聯網
上載者:User

在前面我的blog中,我已經說過了,Launcher所有的案頭項資料是儲存在launcher.db/favorites表中
在 Launcher啟動時loadeworkspace函數中會從資料庫中查詢所有的資料並顯示出來,這個案頭項資料載入過程在我的blog Launcher——啟動過程詳解中有比較詳細的描述,這篇blog,我著重講述Launcher案頭項的添加,變更和刪除,下面就進入主題
1.Launcher案頭項的添加:從使用者操作的角度來看,我們有兩種方式來添加案頭項
--1.從all app view中拖到案頭,從下面的呼叫堆疊知道最後通過LauncherProvider.insert把拖過來的案頭項添加到了案頭,在拖放結束時執行(launcher2.Workspace.onDrop).
 at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
 at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
 at android.content.ContentResolver.insert(ContentResolver.java:587)
 at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
 at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
 at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
 at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1165)
 at com.android.launcher2.Workspace.onDrop(Workspace.java:1125)
--2. 通過長按案頭開啟一個dialog來添加案頭項,通過對象框添加最後調用同樣的方法LauncherProvider.insert去實現操作,只是前面 的發起動作不同,它是在選擇應用的activity結束後回到Launcher.onActivityResult發起調用的。
 at com.android.launcher2.LauncherProvider.insert(LauncherProvider.java:129)
 at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
 at android.content.ContentResolver.insert(ContentResolver.java:587)
 at com.android.launcher2.LauncherModel.addItemToDatabase(LauncherModel.java:242)
 at com.android.launcher2.LauncherModel.addOrMoveItemInDatabase(LauncherModel.java:133)
 at com.android.launcher2.Workspace.onDropExternal(Workspace.java:1203)
 at com.android.launcher2.Workspace.addApplicationShortcut(Workspace.java:1117)
 at com.android.launcher2.Launcher.completeAddApplication(Launcher.java:931)
 at com.android.launcher2.Launcher.onActivityResult(Launcher.java:579)

2.Launcher案頭項的變更:Launcher案頭項的變更只有我們拖動案頭項,改變案頭項的位置,當結束拖放時,會通過調用LauncherProvider.update函數來修改launcher.db/favorites表中的記錄來變更案頭項的位置資訊。
at com.android.launcher2.LauncherProvider.update(LauncherProvider.java:185)
at android.content.ContentProvider$Transport.update(ContentProvider.java:204)
at android.content.ContentResolver.update(ContentResolver.java:707)
at com.android.launcher2.LauncherModel.moveItemInDatabase(LauncherModel.java:159)
at com.android.launcher2.Workspace.onDrop(Workspace.java:1144)

3.Launcher案頭項的刪除:把案頭項拖動到垃圾箱時執行,不多說什麼了,給個呼叫堆疊一看就明白,DeleteZone就是垃圾箱對象對應的構造類
at com.android.launcher2.LauncherProvider.delete(LauncherProvider.java:168)
at android.content.ContentProvider$Transport.delete(ContentProvider.java:198)
at android.content.ContentResolver.delete(ContentResolver.java:675)
at com.android.launcher2.LauncherModel.deleteItemFromDatabase(LauncherModel.java:271)
at com.android.launcher2.DeleteZone.onDrop(DeleteZone.java:123)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.