ExpandableListView

本文是本身在實踐中,發現的問題。 java

有時候想讓界面更加的人性化,就要實現不少的效果,好比只展開一個group,在點擊下個group的同時,關閉以前的group android

 /** 
    * 監聽父節點打開的事件  ide

 */   函數

在一個ExpandableListView,如何實現只展開一個group,方法以下: 佈局

mListView.setOnGroupExpandListener(new OnGroupExpandListener() {  
  
            @Override  
            public void onGroupExpand(int groupPosition) {  
                // TODO Auto-generated method stub   
                for (int i = 0; i < mAdapter.getGroupCount(); i++) {  
                    if (groupPosition != i) {  
                        mListView.collapseGroup(i);  
                    }  
                }  
  
            }  
  
        });

上圖的效果,看上去很好,可是存在一個問題,雖然只展開了一個group,可是在點擊下一個group的時候,該group的標題不會置頂,這就形成了一些困惑,爲了解決這個問題,用到了下邊的方法解決: spa

重寫setOnGroupClickListener方法 code

首先要有一個sign,能夠是int sign,用來記錄group展開的狀態 orm

private int sign= -1;//控制列表的展開
重寫onGroupClick方法
//只展開一個group的實現方法   
        mListView.setOnGroupClickListener(new OnGroupClickListener() {  
  
            @Override  
            public boolean onGroupClick(ExpandableListView parent, View v,  
                    int groupPosition, long id) {  
                // TODO Auto-generated method stub   
                if (sign== -1) {  
                    // 展開被選的group   
                    mListView.expandGroup(groupPosition);  
                    // 設置被選中的group置於頂端   
                    mListView.setSelectedGroup(groupPosition);  
                    sign= groupPosition;  
                } else if (sign== groupPosition) {  
                    mListView.collapseGroup(sign);  
                    sign= -1;  
                } else {  
                    mListView.collapseGroup(sign);  
                    // 展開被選的group   
                    mListView.expandGroup(groupPosition);  
                    // 設置被選中的group置於頂端   
                    mListView.setSelectedGroup(groupPosition);  
                    sign= groupPosition;  
                }  
                return true;  
            }  
        });

1。如何替換ExpandableListView的默認箭頭 xml

解決方法:在配置文件中有個android:groupIndicator屬性,將其設置爲:你的selector,例如:android:groupIndicator="@drawable/lt_expandablelistviewselector" 事件

lt_expandablelistviewselector爲:

<?xml version="1.0" encoding="utf-8"?>     
<selector xmlns:android="http://schemas.android.com/apk/res/android">     
    <item android:state_expanded="true" android:drawable="@drawable/lt_open2" />     
    <item android:drawable="@drawable/lt_norml2" />     
</selector>
ExpandableListView的整個佈局
<ExpandableListView  
android:divider="@drawable/lt_listview_line"  
android:childDivider="@drawable/lt_listview_line"     
android:cacheColorHint="#f5f5f5"  
android:background="#f5f5f5"  
android:id="@+id/citylist"  
android:layout_width="fill_parent"  
android:layout_height="wrap_content"  
android:listSelector="@drawable/lt_imglistselector"  
android:groupIndicator="@drawable/lt_expandablelistviewselector"  
/>
   /** 
         * 監聽父節點關閉的事件 
         */  
       
 elistview.setOnGroupCollapseListener(new OnGroupCollapseListener(){ 
 
  
 @Override  
 public void onGroupCollapse(int groupPosition) {  
               
 if(linear.getVisibility()==View.VISIBLE){  
                   
 linear.setVisibility(View.GONE); 
}  
               
 isExpanding=false;  
}  
              
});  
首次加載所有展開:
mDownloadListView.setAdapter(mDownloadAdapter);

for (int i = 0; i < downloadGroup.size(); i++) {

    mDownloadListView.expandGroup(i);

}

提醒:加載前別忘了判斷adapter是否爲空和有沒有Group數據哦、
不能點擊收縮: 
mDownloadListView.setOnGroupClickListener(new OnGroupClickListener() {

@Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { //

     TODO Auto-generated method stub return true;

    }

});

OK了,把他的組點擊事件屏蔽。呵呵、
ExpandableListView的長按事件
網上的資料不少,可是真正管用的沒幾個,最後找到一個確實能夠用的,在這分享下:
(1)//長按事件

mExpandableListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { 

@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    // TODO Auto-generated method stub 
    menu.setHeaderTitle("選擇操做"); 
    menu.add(0, DOWNLOAD_RETRY, 0, "重試"); 
    menu.add(0, DOWNLOAD_DEL, 0, "刪除"); 
    menu.add(0, DOWNLOAD_START, 0, "啓動"); 
    } 
}); 
(2) 
} 
/** * 長按菜單響應函數 */ @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub 
    //關鍵代碼 
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 
    int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
        //上面的type設定這裏類型的斷定!這裏是child斷定! 
        int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
        //在child斷定裏面,獲取該child所屬group! 
        int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
        //在child斷定裏面,獲取該child所屬position! 
        switch (item.getItemId()) { 
        case DOWNLOAD_RETRY: makeTextShort("我是重試"); 
            break; 
        case DOWNLOAD_DEL: makeTextShort("我是刪除"); 
            break; 
        case DOWNLOAD_START: makeTextShort("我是啓動"); 
        default: 
            break; 
            } 
        return true; 
        } 
    return false; 
    }
//判斷isExpanded就能夠控制是按下仍是關閉,同時更換圖片     if(isExpanded){                 parentImageViw.setBackgroundResource(R.drawable.arrow_down);             }else{                 parentImageViw.setBackgroundResource(R.drawable.arrow_up);             } 
相關文章
相關標籤/搜索