package se.emilsjolander.stickylistheaders;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* @author lsjwzh
*/
class ExpandableStickyListHeadersAdapter extends BaseAdapter implements StickyListHeadersAdapter {
private final StickyListHeadersAdapter mInnerAdapter;
DualHashMap<View,Long> mViewToItemIdMap = new DualHashMap<View, Long>();
DistinctMultiHashMap<Integer,View> mHeaderIdToViewMap = new DistinctMultiHashMap<Integer, View>();
List<Long> mCollapseHeaderIds = new ArrayList<Long>();
ExpandableStickyListHeadersAdapter(StickyListHeadersAdapter innerAdapter){
this.mInnerAdapter = innerAdapter;
}
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
return mInnerAdapter.getHeaderView(position,convertView,parent);
}
@Override
public long getHeaderId(int position) {
return mInnerAdapter.getHeaderId(position);
}
@Override
public boolean areAllItemsEnabled() {
return mInnerAdapter.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int i) {
return mInnerAdapter.isEnabled(i);
}
@Override
public void registerDataSetObserver(DataSetObserver dataSetObserver) {
mInnerAdapter.registerDataSetObserver(dataSetObserver);
}
@Override
public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {
mInnerAdapter.unregisterDataSetObserver(dataSetObserver);
}
@Override
public int getCount() {
return mInnerAdapter.getCount();
}
@Override
public Object getItem(int i) {
return mInnerAdapter.getItem(i);
}
@Override
public long getItemId(int i) {
return mInnerAdapter.getItemId(i);
}
@Override
public boolean hasStableIds() {
return mInnerAdapter.hasStableIds();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View convertView = mInnerAdapter.getView(i,view,viewGroup);
mViewToItemIdMap.put(convertView, getItemId(i));
mHeaderIdToViewMap.add((int) getHeaderId(i), convertView);
if(mCollapseHeaderIds.contains(getHeaderId(i))){
convertView.setVisibility(View.GONE);
}else {
convertView.setVisibility(View.VISIBLE);
}
return convertView;
}
@Override
public int getItemViewType(int i) {
return mInnerAdapter.getItemViewType(i);
}
@Override
public int getViewTypeCount() {
return mInnerAdapter.getViewTypeCount();
}
@Override
public boolean isEmpty() {
return mInnerAdapter.isEmpty();
}
public List<View> getItemViewsByHeaderId(long headerId){
return mHeaderIdToViewMap.get((int) headerId);
}
public boolean isHeaderCollapsed(long headerId){
return mCollapseHeaderIds.contains(headerId);
}
public void expand(long headerId) {
if(isHeaderCollapsed(headerId)){
mCollapseHeaderIds.remove((Object) headerId);
}
}
public void collapse(long headerId) {
if(!isHeaderCollapsed(headerId)){
mCollapseHeaderIds.add(headerId);
}
}
public View findViewByItemId(long itemId){
return mViewToItemIdMap.getKey(itemId);
}
public long findItemIdByView(View view){
return mViewToItemIdMap.get(view);
}
}