工作紀錄 Day 19
※ 浮動按鈕列
※ 解決問題:按下返回鈕會直接離開程式,沒有回到上一頁
※ 解決問題:伺服器資料格式回傳錯誤,導致程式崩潰
※ 解決問題:快速切換頁面時,有機率畫面的轉圈圈不會消失
※ 解決問題:首頁畫面還沒讀取完,轉圈圈就消失
※ 浮動按鈕列
浮動按鈕列,讓使用者可以更快速的找到想要的功能
遭遇困難與解決思路:
※ 解決問題:按下返回鈕會直接離開程式,沒有回到上一頁
發現原因:
研究程式碼後,發現從首頁切換到其他頁面時
因為是直接使用Fragment的replace方法來切換頁面
並不是產生一個新的Activity
如此,按下返回鈕當然就會直接結束程式而不是回到上一頁
解決辦法:
在裝載這些Fragment的Activity內,改寫 onBackPressed() 這個方法
這個方法就是監聽返回按鈕,加入以下程式碼
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentById(R.id.content_container) instanceof MainFragment) { // 如果原本就在首頁
finish();
} else { // 如果原本不是在首頁 → 回首頁
selectItem(getnavHomeFromMain());
}
}
想法很簡單,就只是監聽返回按鈕而已
如果本來是在首頁,按下後要離開程式
如果不是,就回到首頁
研究過程筆記:
※ 解決問題:伺服器資料格式回傳錯誤,導致程式崩潰
發現原因:
這個問題是突然出現的,本來剛做好這個頁面的時候,並沒有此問題
跟著錯誤訊息走,發現原來是因為伺服器回傳的色碼
出現 " 556633 " ( 原本應該要是 #556633 )
少了" # " ,程式使用的 Color.parseColor() 就無法辨識,導致程式崩潰
Color.parseColor(data.getTagColor())
也有出現 " #125533" 這種多了空格的情況
解決辦法:
在接收到資料的地方先行判斷,如果沒有# 就給他加上去,如果有空格就給他消掉!
public String getTagTextColor() {
if (tag_text_color!=null) {
if (!tag_text_color.contains("#"))
tag_text_color = "#" + tag_text_color;
if ((tag_text_color.contains(" ")))
tag_text_color=tag_text_color.replace(" ","");
return tag_text_color;
}else{
return "";
}
}
問題解決!
※ 解決問題:快速切換頁面時,有機率畫面的轉圈圈不會消失
發現原因:
我們首頁一共會跟伺服器分三個階段要六次資料,需時較久,
如果你在他要資料的途中,選擇切換其他頁面
會導致資料還沒回傳成功,所以這行取消轉圈圈的指令沒有被執行到
progressDialog.dismiss();
切到其他頁面後,轉圈圈就會一直留著
解決辦法:
改寫首頁fragment的onDestroy()方法,讓首頁被銷毀的時候同時執行 progressDialog.dismiss(); 即可
@Override
public void onDestroy() {
super.onDestroy();
if (progressDialog.isShowing()) progressDialog.dismiss();
}
研究過程筆記:
※ 解決問題:首頁畫面還沒讀取完,轉圈圈就消失
發現原因:
首頁每次跟伺服器發出要求資料時,都會執行一個
progressDialog.show();
成功接收資料後,會執行
progressDialog.dismiss();
問題出在,首頁一共會發出六個要求
但這六個要求的執行時間不同,成功接收資料的時間也不同
但他們卻都共用同一個 progressDialog
也就是說 只要當其中一個的 progressDialog.dismiss() 被執行
其他要求開啟的progressDialog 都會被取消
解決辦法:
在最後一個資料被成功接收後才執行 progressDialog.dismiss()
問題解決!