工作紀錄日誌 Day 19

  • 208
  • 0

工作紀錄 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() 

問題解決!