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