package pct.droid.widget;
import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Adapter;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class LinearList extends LinearLayout {
private Adapter mAdapter;
private Observer mObserver = new Observer(this);
private OnClickListener mOnItemClickListener;
public LinearList(Context context) {
super(context);
setOrientation(VERTICAL);
}
public LinearList(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(VERTICAL);
}
public LinearList(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setOrientation(VERTICAL);
}
public void setAdapter(Adapter adapter) {
if (mAdapter != null)
mAdapter.unregisterDataSetObserver(mObserver);
mAdapter = adapter;
mAdapter.registerDataSetObserver(mObserver);
mObserver.onChanged();
}
// Should be called before setAdapter
public void setOnItemClickListener(OnClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
private class Observer extends DataSetObserver {
LinearList mContext;
public Observer(LinearList context) {
mContext = context;
}
@Override
public void onChanged() {
List<View> oldViews = new ArrayList<>(mContext.getChildCount());
for (int i = 0; i < mContext.getChildCount(); i++)
oldViews.add(mContext.getChildAt(i));
Iterator<View> iter = oldViews.iterator();
mContext.removeAllViews();
for (int i = 0; i < mContext.mAdapter.getCount(); i++) {
View convertView = iter.hasNext() ? iter.next() : null;
convertView = mContext.mAdapter.getView(i, convertView, mContext);
convertView.setOnClickListener(mOnItemClickListener);
mContext.addView(convertView);
}
super.onChanged();
}
@Override
public void onInvalidated() {
mContext.removeAllViews();
super.onInvalidated();
}
}
}