package com.jiuqi.njt.adapter;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
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.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.jiuqi.njt.R;
import com.jiuqi.njt.management.RepairActivity;
import com.jiuqi.njt.model.UserTreeElement;
import com.jiuqi.util.UIUtil;
/**
* 树状结构适配器
* @author Administrator
*
*/
public class TreeViewSingleAdapter extends BaseAdapter {
@SuppressWarnings({ "unchecked", "rawtypes" })
public TreeViewSingleAdapter(Context context, List objects, List allObjects) {
mInflater = LayoutInflater.from(context);
this.context = context;
showUserCount = objects;
allUserlist = allObjects;
mIconCollapse = BitmapFactory.decodeResource(context.getResources(),
R.drawable.outline_list_collapse);
mIconExpand = BitmapFactory.decodeResource(context.getResources(),
R.drawable.outline_list_expand);
mIconFile = BitmapFactory.decodeResource(context.getResources(),
R.drawable.file);
mIconFileOpen = BitmapFactory.decodeResource(context.getResources(),
R.drawable.fileopen);
mIconPersonActive = BitmapFactory.decodeResource(
context.getResources(), R.drawable.person);
mIconPerson = BitmapFactory.decodeResource(context.getResources(),
R.drawable.person2);
}
private Context context;
private LayoutInflater mInflater;
private Bitmap mIconCollapse;
private Bitmap mIconExpand;
private ViewHolder vHollder;
private Bitmap mIconFile;
private Bitmap mIconFileOpen;
private Bitmap mIconPerson;
private Bitmap mIconPersonActive;
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();
final LinearLayout layout = (LinearLayout) convertView
.findViewById(R.id.treelayout);
int padding = UIUtil.dip2px(context, context.getResources()
.getDimension(R.dimen.margin));
layout.setPadding(padding, padding, padding, padding);
vHollder.text = (TextView) convertView.findViewById(R.id.text);
vHollder.icon = (ImageView) convertView.findViewById(R.id.icon);
vHollder.checkBox = (CheckBox) convertView
.findViewById(R.id.checkBox);
vHollder.checkBox.setVisibility(View.GONE);
vHollder.file_icon = (ImageView) convertView.findViewById(R.id.file_icon);
vHollder.state = (TextView) convertView.findViewById(R.id.state);
convertView.setTag(vHollder);
}
UserTreeElement currentElement = showUserCount.get(position);
vHollder.state.setText(currentElement.getState());
int level = currentElement.getLevel();
vHollder.icon.setPadding(25 * (level + 1),
vHollder.icon.getPaddingTop(), 0,
vHollder.icon.getPaddingBottom());
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()) {
vHollder.icon.setImageBitmap(mIconCollapse);
vHollder.icon.setVisibility(View.INVISIBLE);
if ("".equals(currentElement.getState())) {
vHollder.file_icon.setImageBitmap(mIconPersonActive);
} else {
vHollder.file_icon.setImageBitmap(mIconPerson);
}
}
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 ImageView file_icon;
}
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;
default:
break;
}
}
}
@SuppressLint("NewApi")
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 (context.getClass().equals(RepairActivity.class)) {
if (userElement.getSim() == currentElement.getParent()) {
userElement.setLevel(nextLevel);
userElement.setExpanded(false);
showUserCount.add(position + j, userElement);
j++;
}
} else {
if (userElement.getParent() == currentElement.getId()) {
userElement.setLevel(nextLevel);
userElement.setExpanded(false);
showUserCount.add(position + j, userElement);
j++;
}
}
}
}
this.notifyDataSetChanged();
}
}
}