ExpandableListView控制元件使用中一些小問題的總結

chenguang79發表於2017-02-22

  ExpandableListView控制元件,很好的解決了listView無法進行摺疊和分類的功能(在不進行自定義的情況)。但是它也有一些無法解決的問題,比如伸縮沒有動畫,前方的箭頭位置不能更換,也不能更換圖示等。
  單位的專案整好用到這樣的一個功能,就看了一下,現在把它做一下總結。效果如圖:
  這裡寫圖片描述
  這個圖是最後的效果,採用的是第三方開源的AnimatedExpandableListView控制元件,不用擔心,它是繼承ExpandableListView,新增了伸縮動畫。

ExpandableListView控制元件在使用的時候,經常會遇到以下幾個問題:
 
1、去掉父項最左側的上下箭頭或是將它移動到最右側

2、點選父項展開子項的時候,有互斥的效果。就是一個展開,其它的就全是關閉

3、點選父項展開子項時,有相應的動畫

下面我們就一一說明以上三個問題

1、去掉父項最左側的上下箭頭或是將它移動到最右側

  這個功能,去掉父項最左側的上下箭頭,比較簡單,一行程式碼
  

    //去掉前面一剪頭
     ExpandableListView.setGroupIndicator(null);

  將它移動到最右側,不好意思,這個沒有方法,你只能自己處理,簡單的方法就是去掉左側的箭頭,然後在右側自己加圖片處理。這個比較簡單,只要在Adapter裡的getGroupView方法新增就行
  此方法有一個變數boolean isExpanded,它就是用來判斷狀態的,根據不同的狀態,你換一下右側的圖片就OK了,如下
  

        if (isExpanded) {
            gHolder.gnextIv.setImageResource(R.mipmap.ico_push_bot);
        }else {
            gHolder.gnextIv.setImageResource(R.mipmap.ico_next);
        }

 2、點選父項展開子項的時候,有互斥的效果。就是一個展開,其它的就全是關閉

  這個功能,只要我們重寫setOnGroupExpandListener方法就OK了
  

/**
         * 各項顯示互斥,就是一個展開,另外的關閉
         */
        el_list.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
            @Override
            public void onGroupExpand(int groupPosition) {
                for (int i = 0; i < mAdapter.getGroupCount(); i++) {

                    if (groupPosition != i) {
                        el_list.collapseGroup(i);
                    }
                }
            }
        });

 3、點選父項展開子項時,有相應的動畫

  這個只能使用第三方控制元件,本身沒有法子。我使用的是AnimatedExpandableListView,說到這裡,我自己都在想,前面說了半天,有毛用啊。使用了第三方控制元件,前兩個不是白說。這裡強調一下,這個控制元件是繼承自ExpandableListView的,也就是上面說的兩點,在這裡都同樣實用。

  下載:https://github.com/idunnololz/AnimatedExpandableListView

  例子下載:http://download.csdn.net/detail/chenguang79/9759622

相關文章