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(); } } }