對於之前沒有開發過Android APP的我來說,接到這個需求是很頭痛,毫無頭緒

對APP的印象還停留在大學

所以開發完以後,把內容紀錄下來

若是有更好的方式,歡迎下方留言~~

 

這邊不對宣告、findViewById、RecordAdpter...等 這些基本要有的做說明

只大概描述作法,因為要全貼上來感覺蠻困難的...

 

 

需求說明

姓名手機會有多筆資料,當按下"展開",將所有資料顯示出來,按下"收合",只顯示第一筆

(在姓名、手機的上方、下方 有其他欄位)

呈現結果如下圖

 

image

 

image

 

 

作法說明:

大概的說 就是 總共有三個物件,(1)姓名TextView,(2)電話TextView,(3)姓名+電話的RecyclerView

預設顯示(1)、(2),隱藏(3) ,顯示"展開"

 

當我按下"展開"時,隱藏(1)、(2),顯示(3),並且 "展開"變更為"收合"

當我按下"收合"時,顯示(1)、(2),隱藏(3),並且 "收合"變更為"展開"

 

 

首先我在xml的擺放方式如下

本來是沒有再另外包一層RelativeLayout的,

設定為 電話 below 姓名,RecyclerView below 電話 ,下面的欄位 below RecyclerView 

但是當我在隱藏欄位的時候[.setVisibility(View.GONE);],

下方欄位就會覆蓋到上面的欄位,(不知道是不是因為我隱藏欄位以後,下面的欄位找不到自己要在誰之下,所以位置就跑掉了)

所以使用RelativeLayout,下面的欄位below  RelativeLayout

 

image

 

 

程式如下(只能貼這樣片段.. 我很懷疑這樣真的有人看得懂嗎.....)

 

//webService取完資料,再從Bean將資料取出塞到對應欄位
private void loadDetail(){
    m_tvName.setText(m_testInfo.getName());
    m_tvMobile.setText(m_testInfo.getMobile());

    //展開收合 預設收合 顯示"展開"
    m_tvFlag.setText(getString(R.string.btn_list_open));

    //若資料只有一筆,則不顯示reecycleView
    if( m_testList.getListSize(List.JO_KEY_LIST) == 1){
        TestListInfo testListInfo = m_testList.getListItemByIndex(0 , List.JO_KEY_LIST);

        m_tvName.setText(TestListInfo .getJoKeyName());
        m_tvMobile.setText(TestListInfo .getJoKeyMobile());
        m_rvRecord.setVisibility(View.GONE);
    }

}

 

@Override
public void onClick(View view) {
    int iViewID = view.getId();

    if(iViewID == R.id.tvFlag){//姓名-展開收合
                boolean action = false ;
        //若資料小於一筆,則按展開收合不做反應
               if( m_List.getListSize(List.JO_KEY_LIST) <= 1){
            action = false;
        }else{
            action = true ;
        }

        //展開
                if(getString(R.string.btn_list_close).equals(m_tvFlag.getText())){
            m_tvFlag.setText(getString(R.string.btn_list_open));
            if(action == true){
                m_tvName.setVisibility(View.VISIBLE);
                m_tvMobile.setVisibility(View.VISIBLE);
                m_rvRecord.setVisibility(View.GONE);
            }
        }else{
            m_tvFlag.setText(getString(R.string.btn_list_close));
            if(action == true){
                m_tvName.setVisibility(View.GONE);
                m_tvMobile.setVisibility(View.GONE);
                m_rvRecord.setVisibility(View.VISIBLE);

            }

        }

    }
}

 

arrow
arrow
    文章標籤
    Android
    全站熱搜

    我的暱稱 發表在 痞客邦 留言(0) 人氣()