本文是本身在實踐中,發現的問題。 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); }