對於之前沒有開發過Android APP的我來說,接到這個需求是很頭痛,毫無頭緒
對APP的印象還停留在大學
所以開發完以後,把內容紀錄下來
若是有更好的方式,歡迎下方留言~~
這邊不對宣告、findViewById、RecordAdpter...等 這些基本要有的做說明
只大概描述作法,因為要全貼上來感覺蠻困難的...
需求說明
姓名手機會有多筆資料,當按下"展開",將所有資料顯示出來,按下"收合",只顯示第一筆
(在姓名、手機的上方、下方 有其他欄位)
呈現結果如下圖
作法說明:
大概的說 就是 總共有三個物件,(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
程式如下(只能貼這樣片段.. 我很懷疑這樣真的有人看得懂嗎.....)
//從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); } } } }
留言列表