天天看點

[Android]expandablelistview預設展開以及記錄已展開或關閉的子布局

1.聲明變量

//聲明記錄停止滾動時候,可見的位置  
private int scrollPos,scrollTop;  
//記錄是否展開
private HashMap<Integer, Boolean> gxmap = new HashMap<Integer, Boolean>();
	
           

2.預設展開

if(subBaseList.size()>0)
{
        //設定adapter
	mAdapter = new EqStateExAdapter(context, subBaseList);
	lvState.setAdapter(mAdapter);	
}

for (int i = 0; i < mAdapter.getGroupCount(); i++)
{
        //預設記錄為已展開
	gxmap.put(i, true);
        //全部展開
	lvState.expandGroup(i);

}
           

3.listview回調中處理記錄

lvState.setOnScrollListener(new AbsListView.OnScrollListener() 
{
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState)
       {
           
//滑動時記錄目前可見的位置
	scrollPos = lvState.getFirstVisiblePosition();
        View v1 = lvState.getChildAt(0);
        scrollTop = (v1 == null) ? 0 : v1.getTop();
       }
			
	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) 
           
{}
});
		
lvState.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener()
{       //關閉監聽
	@Override
	public void onGroupCollapse(int groupPosition) 
       {
	gxmap.put(groupPosition, false);//記錄
				
       }
});
		
lvState.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() 
{       //展開監聽
	@Override
	public void onGroupExpand(int groupPosition) 
       {
	gxmap.put(groupPosition, true);//記錄				
       }
});
           

4.資料更新後重新整理listview

for (int i = 0; i < mAdapter.getGroupCount(); i++) 
{
	if(gxmap.size()>0)
       {
                //根據記錄展開或關閉
		Boolean isgx = gxmap.get(i);
		if (isgx) 
               {
		    lvState.expandGroup(i);
		}
                else
               {
		    lvState.collapseGroup(i);
		}
	}else{
                //預設展開
		lvState.expandGroup(i);
	}
}
           

記錄.

繼續閱讀