udacity android學習筆記: lesson 3,udacityandroid
udacity android學習筆記: lesson 3
作者:乾貨店打雜的 /titer1 /Archimedes
出處:https://code.csdn.net/titer1
聯絡:1307316一九六八
聲明:本文採用以下協議進行授權: 自由轉載-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,轉載請註明作者及出處。
tips:https://code.csdn.net/titer1/pat_aha/blob/master/Markdown/android/
- more activity learn
- Intent framework
- 內容作為學習筆記,估計後期將會分成三部分
理論
start baby steps
click item的事件響應
關鍵是ItemClickListener
調試利器 toast
有點類似mfc中的afxmessage(最近還遇到線程中如何?afxmessage的效果( ̄▽ ̄)”)哈
ItemClickListener + toast 代碼實踐
detail activity
lesson 3-8引出detail activity
實踐
當建立activity(DetailActvity)成功後,會增加以下檔案
- new activity java file (eg:DetailActvity.java)
- relative fragment(eg: fragment_deatil.xml)
- relatvie layout(eg:activity_deatil.xml)
- 其他如anroidManifest被改變
Intents framework
一個activity移動到另外一個activity時,使用startactivity,參數是intent
一種直覺,感覺intent封裝了類似c的線程間通訊(2個activity)+進程間通訊(2個app)
當進行到3-11課時,Rado講解內容如下:
intent內容應該含有:
- Not class name
- but action done by another activity
- and the data the action should be performed
lauch DeatilActivity 代碼實踐
取代以前的toast
擴充:隱藏式/顯式 intent區別
去除以前toast的代碼,換為intent
intent的初始化就是索引值對的初始化,這裡是顯式intent
和傳統的mfc事件編程相比,這裡站在更高的抽象層次。mfc是一個list item對應一種事件,我用過的mfc,每個事件和一個固定的Itemid綁定。
到此,只解決了intent填充內容,下一步我們要在detailActivity中,解析intent傳遞過來的內容
Display Content DetailActivity 代碼實踐
貌似 ctrl+o 提示 在這裡大顯身手,待實踐證明todo:在群上 有對工具的分享,alt+enter 自動類型轉換的提示
- 取得intent
- 在detailView中顯示
3_16課 很耍寶,( ̄▽ ̄)"當前setting 會不會工作啊,待實踐證明
setting UX
wire frame 圖
如果需要科學的做需求設計,可以參考如下:
上述流程圖會告訴你什麼可以做,什麼不可以做
shared preference
第一次聽,直覺是可以重用的系統setting?
android developer options 有很多setting 設計的參考
上面有代碼,直接取到系統的preference,
每一種prefence對應一個值,資料結構上就用索引值對來儲存。
要匯入系統的相關preference,上述圖告訴方法。
代碼上的變化:
- 增加settingActivity
- androidManifest
告知activity,還有parent
- string.xml
lauch setting Activity 代碼實踐
待補充
這樣的修改在mainActivity 和DetailActivity都有。
休息
3_23 停留
開工
第三節課 本質 就是
將 activity listener
還有shared setting
添加location perference 相關的xmlhard code style
style with string.xml
modify settingActivity
lesson 3-24 聲明原理lesson 3-25 只說到使用者自己參考api:use user's location prefence when fetching weather data from server
- load preferences xml layout in settingsActivity
- bind preference summary to value for loaction setting
中文解讀:1)讀取resource檔案中的 perperence layout2)為loation 設定 綁定事件響應bindPreferenceSummaryToValue
use shared preferences 代碼實踐
原理參考sdk網站,
主要代碼參考如下:
簡言之,就是從preference這個索引值對裡面取到我們需要的值,然後作為參數傳給天氣任務。
!! 真正的 refresh
我們要解決的問題是去除以前的dummy data,使用真資料。
資料的重新整理是updateWeather函數做得,
這個函數在 forcastFragment.java中。
我們來看哪些地方調用了它
onOptionsItemSelected updateWeather
onStart updateweather
ok,主要是上面兩處,還有還要把forcastFragment中的 onCreateView的假資料都刪除
檢測方法是, 進入app,輸入新的location,看看有沒有資料變化。
temprature unit setting
理論 3-28實踐 3-29todo:爭取把其他使用代碼的圖給換成 真實的代碼
關鍵詞,複習
要用一種新的 preference subclass(sharedpreference 的一種): listpreference,
途中,可以看到list preference的layout設定,
關於entryValue和entries的作用,我現在不是特別清楚,貌似前者常量,而非使用者不可見。
todo 關於entryValue和entries的作用
下面將設計顯示 氣溫單位 選項的代碼
主要是添加
settingActivity onCreate bindPreferenceSummaryToValue(getString(R.string.pref_units_key))
上述完成綁定。
決定 溫度顯示格式的代碼是
forecastFragment formatHighLows(...) { If(轉換為imperial == ture) .... else doNothing ...//最高溫和最低溫放一個字串返回 }
!!調試技巧 debug breakpoint
3-30 詳細介紹這裡的內容
我不會告訴你,我當初找debug功能是找了半天的。
要調試,不僅要學會打Log,還要step by step 追蹤。
以這裡的preference 功能調試為例,我們將在setingActvitiy中以下兩處下斷點。
- line 59: preference.setSummary(listPreference.get…)
- line 63:
preference.setSummay(stringValue);
如果設定成功的話,那麼每次在preference裡面設定的值都可以在上述某斷點查看到。
並且continue過後的話,將會在介面上更新。
關於調試的幾點擴充1.debug or relase exist2.條件斷點3.支援多線程嗎4.adb 模式如何調試5.可以加入framework 代碼 進行調試嗎6.可以支援jni代碼的調試? c? 位元組碼?7.一本iso書的代碼引入
launch implict intent
3-31 直覺:站在巨人的肩膀上,引用其他app功能3-32 深入分析3-33 solution
添加新的 setting item
請注意,同時要更新 strings.xml中的字串 action_map
上面是使用 Intent的代碼(代碼還不完整),主要是
加入 openPreferredLoactionInMap
todo 深入openPreferredLoactionInMap
rest time - 第三輪
It is time to have a rest
now 進行到 3-34
都用了兩小時了
intent resolution
每個app的actvitity都有如下的過濾器處理地圖相關的intent
<intent-filter> <action = "android.intent.action.VIEW"/> <data android:scheme ="geo"/></intent-filter>
簡言之,過濾器
share intent介紹
這是被開發人員使用得最多的Intent
- 實現形式
shareActionProvider的action_SEND操作
tips:使用ctrl+shift+左右 查看對應的主要畫面格連續按D/F 幀的粒度更小tips : when use potplayer,定製播放視窗初始化大小,還有視頻,詳細見x_tips_player.jpg
緊接著,我們來看看線框圖吧,輔助設計
所有的實現都在detail activity裡面展開。
以上我們的todo list
share intent 代碼實踐
這是課程3-36的內容。
首先來填個字串吧,就在strings.xml,標記action_share
然後我們新添加一個menu相關的xml,取名為detailfragment.xml,內容如下(本方法僅對android 4.0及以上版本有效),
第三步,修改 DetailFragment的內容,
添加log_tag,和一個標記字串,
第四步,這才是關鍵的,修改onCreateView,
每個activity都有自己的intent
- get intent
- filter extra_text
- set value to the orignal intent “EXTRA_TEXT”
第五步,繼續
剛點的INTENT是我們自己封裝的啊,
其中要注意的是:
- action_send類型的activity
- 不儲存狀態(分享出去的activity是不用儲存的)的標誌, flag_actvity_clear_when_task_reset
,如果不設定,那麼在退出這個activity將會遇到煩惱
第6步,就是使能操作,
往DeatailFragment的建構函式裡面添加
setHasOptionsMenu(true);
只有這個標誌位有了,才會調用onCreateOptionMenu() ,這可是最後一步的勞動成果
最後一步,建立我們的onCreateOptionMenu,
簡單說來,這就是我們的Menu響應函數
總結剛才內容,這是我第一次理解的層次(後面將會更新認識)
- (step 1+2)準備好布局
- (step3+4+5) 初始化intent
- (step 6/7)menu響應函數
小憩
尼瑪,先在大腦中各種intent奔走中,休息一會
broad intent
- 系統發送資訊如充電等,是通過sendBroadcast方法實現的
3-37 原理介紹3-38 代碼架構+ 接受的兩種實現
這門課的乾貨,也比較多,主要就是將如何合適的接受廣播內容。
先放上一個經典的圖,
以下四個圖,分別從maniest方式 和 動態方式的介紹了 接收器代碼的 實現
下面我們就對剛才學到的廣播接收的原理,應用到充電事件的接受上,
裡程碑時間
- How to create new activity
- the relation with activities
- how to use the INTENT
激動人心的activity 生命週期在下一節課。
- 資料儲存
- 資料庫
- contentProvider
其他,android play的介紹(高品質/穩定)
小節:
晚上用時 1個半小時
其他
what is frament ?
開源oj p.a.t app
middle:Dan
raydo ,
catherine
地點:上海大學寶山校區C區1樓某教室