package com.jiuqi.njt.adapter;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.jiuqi.njt.R;
import com.jiuqi.njt.model.UserTreeElement;
/**
* 派工树状结构适配器
* @author Administrator
*
*/
public class TreeViewAdapterNew extends BaseAdapter {
private Context con ;
private int height;
private int wid ;
@SuppressWarnings({ "unchecked", "rawtypes" })
public TreeViewAdapterNew(Context context, List objects ,List allObjects) {
mInflater = LayoutInflater.from(context);
con = context;
showUserCount = objects;
allUserlist = allObjects;
mIconCollapse = BitmapFactory.decodeResource(context.getResources(), R.drawable.new_outline_list_collapse);
mIconExpand = BitmapFactory.decodeResource(context.getResources(),R.drawable.new_outline_list_expand);
mIconFile = BitmapFactory.decodeResource(context.getResources(),R.drawable.new_file);
mIconFileOpen = BitmapFactory.decodeResource(context.getResources(),R.drawable.new_fileopen);
mIconPersonActive = BitmapFactory.decodeResource(context.getResources(),R.drawable.new_person);
mIconPerson = BitmapFactory.decodeResource(context.getResources(),R.drawable.person2);
}
private LayoutInflater mInflater;
private Bitmap mIconCollapse;
private Bitmap mIconExpand;
private Bitmap mIconFile;
private Bitmap mIconFileOpen;
private Bitmap mIconPerson;
private Bitmap mIconPersonActive;
private ViewHolder vHollder;
private List<UserTreeElement> showUserCount;
private List<UserTreeElement> allUserlist;
public void setAllUserlist(ArrayList<UserTreeElement> allUserlist) {
this.allUserlist = allUserlist;
}
public List<UserTreeElement> getShowUserCount() {
return showUserCount;
}
public void setShowUserCount(List<UserTreeElement> showUserCount) {
this.showUserCount = showUserCount;
}
public List<UserTreeElement> getAllUserlist() {
return allUserlist;
}
public void setAllUserlist(List<UserTreeElement> allUserlist) {
this.allUserlist = allUserlist;
}
public void setShowUserCount(ArrayList<UserTreeElement> showUserCount) {
this.showUserCount = showUserCount;
}
public int getCount() {
return showUserCount.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@SuppressLint("NewApi")
public View getView(int position, View convertView, ViewGroup parent) {
convertView = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.outline, null);
vHollder = new ViewHolder();
vHollder.text = (TextView) convertView.findViewById(R.id.text);
vHollder.icon = (ImageView) convertView.findViewById(R.id.icon);//new_outline_list_collapse
vHollder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
vHollder.state = (TextView)convertView.findViewById(R.id.state);
vHollder.isFail = (TextView)convertView.findViewById(R.id.isFail);
vHollder.file_icon = (ImageView) convertView.findViewById(R.id.file_icon);
vHollder.checkLinear = (LinearLayout)convertView.findViewById(R.id.checkLinear);
convertView.setTag(vHollder);
}
UserTreeElement currentElement = showUserCount.get(position) ;
if(!"".equals(currentElement.getState())){
vHollder.checkBox.setClickable(false);
}
vHollder.checkBox.setChecked(currentElement.isChecked());
vHollder.state.setText(currentElement.getState());
if(null!=currentElement.getIsFail()){
if("定位失败".equals(currentElement.getIsFail())){
vHollder.isFail.setTextColor(con.getResources().getColor(R.color.red));
vHollder.isFail.setOnClickListener(new TreeViewAdapterListener(position));
}else{
vHollder.isFail.setTextColor(con.getResources().getColor(R.color.blue));
}
vHollder.isFail.setText(currentElement.getIsFail());
}
int level = currentElement.getLevel();
vHollder.icon.setPadding(20* (level + 1), vHollder.icon.getPaddingTop(), 0, vHollder.icon.getPaddingBottom());
setLinearParams();
vHollder.text.setText(currentElement.getOutlineTitle());
if (currentElement.isMhasChild()
&& (currentElement.isExpanded() == false)) {
vHollder.icon.setImageBitmap(mIconCollapse);//加
vHollder.file_icon.setImageBitmap(mIconFile);//文件夹闭合
} else if (currentElement.isMhasChild()
&& (currentElement.isExpanded() == true)) {
vHollder.icon.setImageBitmap(mIconExpand);//减
vHollder.file_icon.setImageBitmap(mIconFileOpen);//文件夹打开
} else if (!currentElement.isMhasChild()&¤tElement.isCooper()){
//是分组但是没有子节点
vHollder.icon.setImageBitmap(mIconCollapse);//加
vHollder.icon.setVisibility(View.INVISIBLE);
//新加的9月5号
LinearLayout.LayoutParams params = new LayoutParams(wid - 5, height);
vHollder.checkLinear.setLayoutParams(params);
//新加的9月5号
} else{
vHollder.icon.setVisibility(View.INVISIBLE);
if (currentElement.getLevel() == 1) {
LinearLayout.LayoutParams params = new LayoutParams(wid/3, height);
vHollder.checkLinear.setLayoutParams(params);
}else if(currentElement.getLevel() == 2){
LinearLayout.LayoutParams params = new LayoutParams(wid, height);
vHollder.checkLinear.setLayoutParams(params);
}
if("".equals(currentElement.getState())){
vHollder.file_icon.setImageBitmap(mIconPersonActive);//new_person 蓝色的
}else{
vHollder.file_icon.setImageBitmap(mIconPerson);//person2 灰色的
}
}
vHollder.checkBox.setOnClickListener(new TreeViewAdapterListener(position));
vHollder.icon.setOnClickListener(new TreeViewAdapterListener(position));
return convertView;
}
public final class ViewHolder {
public CheckBox checkBox;
public TextView text;
public ImageView icon;
public TextView state;
public TextView isFail;
public ImageView file_icon;
public LinearLayout checkLinear;
}
class TreeViewAdapterListener implements OnClickListener{
private int position;
TreeViewAdapterListener(int pos) {
position = pos;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.icon:
setTreeOpenOrClose(position);
break;
case R.id.checkBox:
setTreeSelected(position);
break;
case R.id.isFail:
String message = "";
UserTreeElement currentElement = showUserCount.get(position);
for (UserTreeElement element : allUserlist) {
if( currentElement.getSim().equals(element.getSim())){
message = element.getFailReason();
}
}
Dialog dialog = new AlertDialog.Builder(con).setMessage(message).create();
dialog.show();
break;
default:
break;
}
}
}
private void setTreeSelected(int position){
// /没有子节点时
UserTreeElement currentElement = showUserCount.get(position);
if (!currentElement.isMhasChild()) {
// /得到子节点,然后设置选中
vHollder.checkBox.toggle();
currentElement.setCheckedToggle();
this.notifyDataSetChanged();
return;
} else {
currentElement.setCheckedToggle();
// 有子节点并且已经打开了
if (currentElement.isExpanded()) {
// /取消选中的选择和隐藏子节点
for (int i = position + 1; i < showUserCount.size(); i++) {
if (currentElement.getLevel() >= showUserCount
.get(i).getLevel()) {
break;
}
//跟父节点保持一致
showUserCount.get(i).setChecked(currentElement.isChecked());
}
} else {
List<UserTreeElement> allUserlistTemp = allUserlist;
setCheckById(currentElement,allUserlistTemp);
}
this.notifyDataSetChanged();
}
}
private void setCheckById(UserTreeElement currentElement,List<UserTreeElement> allUserlistTemp){
for (UserTreeElement userElement : allUserlistTemp) {
if (userElement.getParent() == currentElement.getId()) {
userElement.setLevel(currentElement.getLevel()+1);
userElement.setChecked(currentElement.isChecked());
if(userElement.isMhasChild()){
setCheckById(userElement,allUserlistTemp);
}
}
}
}
public void setTreeOpenOrClose(int position){
// /没有子节点时
UserTreeElement currentElement = showUserCount.get(position);
if (!currentElement.isMhasChild()) {
return;
} else {
// 有子节点并且已经打开了
if (currentElement.isExpanded()) {
currentElement.setExpanded(false);
ArrayList<UserTreeElement> temp = new ArrayList<UserTreeElement>();
// /取消选中的选择和隐藏子节点
for (int i = position + 1; i < showUserCount.size(); i++) {
if (currentElement.getLevel() >= showUserCount.get(i).getLevel()) {
break;
}
temp.add(showUserCount.get(i));
}
showUserCount.removeAll(temp);
} else {
currentElement.setExpanded(true);
int level = currentElement.getLevel();
int nextLevel = level + 1;
for (UserTreeElement userElement : allUserlist) {
int j = 1;
if (userElement.getParent() == currentElement.getId()) {
userElement.setLevel(nextLevel);
userElement.setExpanded(false);
showUserCount.add(position + j,userElement);
j++;
}
}
}
this.notifyDataSetChanged();
}
}
private void setLinearParams()
{
ViewTreeObserver vto2 = vHollder.icon.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
vHollder.checkLinear.getViewTreeObserver().removeGlobalOnLayoutListener(this);
wid = vHollder.icon.getHeight();
height = vHollder.checkLinear.getHeight();
}
});
}
}