package com.basic.security.fragment.organizationHelper; import android.app.Activity; import android.content.Context; import android.text.Html; import android.text.Spanned; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.basic.security.R; import java.util.HashMap; import java.util.List; public class TreeAdapter extends BaseAdapter { private Context mcontext; private Activity mActivity; private List pointList; private String keyword = ""; private HashMap pointMap = new HashMap<>(); public TreeAdapter(final Context mcontext, List pointList, HashMap pointMap) { this.mcontext = mcontext; this.mActivity = (Activity) mcontext; this.pointList = pointList; this.pointMap = pointMap; } /** * 从TreePoint开始一直展开到顶部 * * @param treePoint */ private void openExpand(TreePoint treePoint) { if ("0".equals(treePoint.getPARENTID())) { treePoint.setExpand(true); } else { pointMap.get(treePoint.getPARENTID()).setExpand(true); openExpand(pointMap.get(treePoint.getPARENTID())); } } //第一要准确计算数量 @Override public int getCount() { int count = 0; for (TreePoint tempPoint : pointList) { if ("0".equals(tempPoint.getPARENTID())) { count++; } else { if (getItemIsExpand(tempPoint.getPARENTID())) { count++; } } } return count; } //判断当前Id的tempPoint是否展开了 private boolean getItemIsExpand(String ID) { for (TreePoint tempPoint : pointList) { if (ID.equals(tempPoint.getID())) { return tempPoint.isExpand(); } } return false; } @Override public Object getItem(int position) { return pointList.get(convertPostion(position)); } private int convertPostion(int position) { int count = 0; for (int i = 0; i < pointList.size(); i++) { TreePoint treePoint = pointList.get(i); if ("0".equals(treePoint.getPARENTID())) { count++; } else { if (getItemIsExpand(treePoint.getPARENTID())) { count++; } } if (position == (count - 1)) { return i; } } return 0; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(mcontext).inflate(R.layout.adapter_treeview, null); holder = new ViewHolder(); holder.text = convertView.findViewById(R.id.text); holder.icon = convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final TreePoint tempPoint = (TreePoint) getItem(position); int level = TreeUtils.getLevel(tempPoint, pointMap); holder.icon.setPadding(25 * level, holder.icon.getPaddingTop(), 0, holder.icon.getPaddingBottom()); if ("0".equals(tempPoint.getISLEAF())) { //如果为父节点 if (!tempPoint.isExpand()) { //不展开显示加号 holder.icon.setVisibility(View.VISIBLE); holder.icon.setImageResource(R.drawable.outline_list_collapse); } else { //展开显示减号 holder.icon.setVisibility(View.VISIBLE); holder.icon.setImageResource(R.drawable.outline_list_expand); } } else { //如果叶子节点,不占位显示 holder.icon.setVisibility(View.INVISIBLE); } //如果存在搜索关键字 if (keyword != null && !"".equals(keyword) && tempPoint.getNNAME().contains(keyword)) { int index = tempPoint.getNNAME().indexOf(keyword); int len = keyword.length(); Spanned temp = Html.fromHtml(tempPoint.getNNAME().substring(0, index) + "" + tempPoint.getNNAME().substring(index, index + len) + "" + tempPoint.getNNAME().substring(index + len, tempPoint.getNNAME().length())); holder.text.setText(temp); } else { holder.text.setText(tempPoint.getNNAME()); } holder.text.setCompoundDrawablePadding(DensityUtil.dip2px(mcontext, 10)); return convertView; } public void onItemClick(int position) { TreePoint treePoint = (TreePoint) getItem(position); if ("1".equals(treePoint.getISLEAF())) { //点击叶子节点 //处理回填 Toast.makeText(mcontext, getSubmitResult(treePoint), Toast.LENGTH_SHORT).show(); } else { //如果点击的是父类 if (treePoint.isExpand()) { for (TreePoint tempPoint : pointList) { if (tempPoint.getPARENTID().equals(treePoint.getID())) { if ("0".equals(treePoint.getISLEAF())) { tempPoint.setExpand(false); } } } treePoint.setExpand(false); } else { treePoint.setExpand(true); } } this.notifyDataSetChanged(); } //选择操作 private void onModeSelect(TreePoint treePoint) { if ("1".equals(treePoint.getISLEAF())) { //选择叶子节点 //处理回填 treePoint.setSelected(!treePoint.isSelected()); } else { //选择父节点 int position = pointList.indexOf(treePoint); boolean isSelect = treePoint.isSelected(); treePoint.setSelected(!isSelect); if (position == -1) { return; } if (position == pointList.size() - 1) { return; } position++; for (; position < pointList.size(); position++) { TreePoint tempPoint = pointList.get(position); if (tempPoint.getPARENTID().equals(treePoint.getPARENTID())) { //如果找到和自己同级的数据就返回 break; } tempPoint.setSelected(!isSelect); } } this.notifyDataSetChanged(); } private String getSubmitResult(TreePoint treePoint) { StringBuilder sb = new StringBuilder(); addResult(treePoint, sb); String result = sb.toString(); if (result.endsWith("-")) { result = result.substring(0, result.length() - 1); } return result; } private void addResult(TreePoint treePoint, StringBuilder sb) { if (treePoint != null && sb != null) { sb.insert(0, treePoint.getNNAME() + "-"); if (!"0".equals(treePoint.getPARENTID())) { addResult(pointMap.get(treePoint.getPARENTID()), sb); } } } class ViewHolder { TextView text; ImageView icon; ImageButton ib_select; } }