package com.ab.view.pullview;
import java.util.ArrayList;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
/**
*
* © 2012 amsoft.cn
* 名称:AbTwoColumnListView.java
* 描述:代替系统的GridView
* @author 还如一梦中
* @date 2015年8月12日 下午4:13:51
* @version v1.0
*/
public class AbTwoColumnListView extends LinearLayout {
private LinearLayout mainLayout;
private LinearLayout firstColumn;
private LinearLayout secondColumn;
/** Adapter. */
private BaseAdapter adapter = null;
/** Adapter监听器. */
private AdapterDataSetObserver mDataSetObserver;
private ArrayList<View> items;
private OnItemClickListener onItemClickListener;
public AbTwoColumnListView(Context context) {
this(context, null);
}
public AbTwoColumnListView(Context context, AttributeSet attrs,int defStyle) {
super(context, attrs, defStyle);
mainLayout = new LinearLayout(context);
mainLayout.setBackgroundColor(Color.WHITE);
mainLayout.setLayoutParams(new LayoutParams(500, 500));
mainLayout.setOrientation(LinearLayout.HORIZONTAL);
firstColumn = new LinearLayout(context);
firstColumn.setOrientation(LinearLayout.VERTICAL);
firstColumn.setPadding(10, 10, 5, 10);
secondColumn = new LinearLayout(context);
secondColumn.setOrientation(LinearLayout.VERTICAL);
secondColumn.setPadding(5, 10, 10, 10);
mainLayout.addView(firstColumn, new LinearLayout.LayoutParams(0,LayoutParams.WRAP_CONTENT, 1));
mainLayout.addView(secondColumn, new LinearLayout.LayoutParams(0,LayoutParams.WRAP_CONTENT, 1));
this.addView(mainLayout, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
items = new ArrayList<View>();
}
public AbTwoColumnListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
class AdapterDataSetObserver extends DataSetObserver {
@Override
public void onChanged() {
int count = adapter.getCount();
if (count > items.size()) {
addChildren();
} else {
layoutChildren();
}
super.onChanged();
}
@Override
public void onInvalidated() {
super.onInvalidated();
}
}
public void setAdapter(BaseAdapter adapter) {
this.adapter = adapter;
if (adapter != null && mDataSetObserver != null) {
adapter.unregisterDataSetObserver(mDataSetObserver);
}
if (adapter != null) {
mDataSetObserver = new AdapterDataSetObserver();
adapter.registerDataSetObserver(mDataSetObserver);
}
layoutChildren();
}
protected void layoutChildren() {
firstColumn.removeAllViews();
secondColumn.removeAllViews();
items.clear();
if (adapter != null) {
int itemCount = adapter.getCount();
for (int i = 0; i < itemCount; i++) {
View viewInfo = adapter.getView(i, null, null);
viewInfo.setVisibility(View.VISIBLE);
items.add(viewInfo);
if ((i + 1) % 2 == 1) {
firstColumn.addView(viewInfo);
} else {
secondColumn.addView(viewInfo);
}
}
}
}
/**
* Adds the children.
*/
protected void addChildren() {
if (adapter != null) {
int count = adapter.getCount();
if (count > items.size()) {
for (int i = items.size(); i < count; i++) {
View viewInfo = adapter.getView(i, null, null);
items.add(viewInfo);
if ((i + 1) % 2 == 1) {
firstColumn.addView(viewInfo);
} else {
secondColumn.addView(viewInfo);
}
}
}
}
}
public OnItemClickListener getOnItemClickListener() {
return onItemClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
}