android ExpandableListView+CheckBox实现组选列表

需要用ExpandableListView+CheckBox实现一个组选列表,ExpandableListView组列表为部门,子列表为成员。需要选中部门的CheckBox时,选中所有组内成员CheckBox,取消时全部取消。选择单个组内成员时,未全部选中该部门成员,则部门CheckBox不勾选,如选中了所有成员,则自动勾选部门CheckBox。希望以前做过的朋友可以给个详细的例子

下面附上我的代码


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;



import java.util.ArrayList;
import java.util.List;
import java.util.Map;



public class ReportListAdapter extends BaseExpandableListAdapter {

    private Context context;
    private List<DepartmentEntity> parentList;
    private Map<String, List<EmployeeEntity>> map;

    private List<Boolean> parentStatusList = new ArrayList<Boolean>();
    private List<Boolean> childStatusList = new ArrayList<Boolean>();

    public ReportListAdapter(Context context, List<DepartmentEntity> parentList,
                             Map<String, List<EmployeeEntity>> map) {
        this.context = context;
        this.parentList = parentList;
        this.map = map;

    }

    // 得到子item需要关联的数据
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        String key = parentList.get(groupPosition).getId();
        return (map.get(key).get(childPosition));
    }

    // 得到子item的ID
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    // 设置子item的组件
    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             final boolean isLastChild, View convertView, final ViewGroup parent) {
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.report_list_child_item,
                    null);
        }

        String key = this.parentList.get(groupPosition).getId();
        final EmployeeEntity employee = map.get(key).get(childPosition);
        String name = employee.getName();
        TextView employeeName = BaseViewHolder.get(convertView,
                R.id.employee_name);
        employeeName.setText(name);

        CheckBox childCB = BaseViewHolder.get(convertView, R.id.employee_checkbox);
//            if (employee.isChecked()) {
//                cb.setChecked(true);
//            } else {
//                cb.setChecked(false);
//            }
        childCB.setChecked(employee.isChecked());
//        notifyDataSetChanged();
        childCB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                CheckBox nowCB = (CheckBox) view;
                if (nowCB.isChecked()) {
                    employee.setIsChecked(true);
//
//                    //获得子item数量
                    int childSize = getChildrenCount(groupPosition);
                    //其他子item状态
                    List<Boolean> otherChildStatus = new ArrayList<Boolean>();
                    otherChildStatus.clear();
                    for (int i = 0; i < childSize; i++) {
                        if (i != childPosition) {
                            boolean isLastChild1;
                            if (i == childSize - 1) {
                                isLastChild1 = true;
                            } else {
                                isLastChild1 = false;
                            }
                            //获得子item
                            View view1 = getChildView(groupPosition, i, isLastChild1, null, null);
                            CheckBox childCB = (CheckBox) view1.findViewById(R.id.employee_checkbox);
                            boolean cbStatus;
                            if (childCB.isChecked()) {
                                cbStatus = true;
                            } else {
                                cbStatus = false;
                            }
                            otherChildStatus.add(cbStatus);
                        }
                    }

                    //获得父item
                    View parentView1 = getGroupView(groupPosition, true, null, null);
                    //获取父item的cb
                    CheckBox parentCB = (CheckBox) parentView1.findViewById(R.id.department_checkbox);

                    //设置父Item选项框状态
                    for (int i = 0; i < otherChildStatus.size(); i++) {

                        if (!otherChildStatus.get(i)) {
                            parentList.get(groupPosition).setIsChecked(false);
                            parentCB.setChecked(false);
                            System.out.println("设置父cb不选");

                            break;
                        } else {
                            parentList.get(groupPosition).setIsChecked(true);
                            parentCB.setChecked(true);
                            notifyDataSetChanged();

                            System.out.println("设置父cb全选中");

                        }
                    }
                    notifyDataSetChanged();
                } else {
                    //获得父item
                    View parentView = getGroupView(groupPosition, true, null, null);


                    employee.setIsChecked(false);
                    CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox);
                    parentList.get(groupPosition).setIsChecked(false);
                    parentCB.setChecked(false);

                    System.out.println("设置父cb不选");

                    notifyDataSetChanged();
                }
            }
        });


//        cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//            @Override
//            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
//                //获得父item
//                View parentView = getGroupView(groupPosition, true, null, null);
//                if (isChecked) {
//                    employee.setIsChecked(true);
//
//                    //获得子item数量
//                    int childSize = getChildrenCount(groupPosition);
//                    //其他子item状态
//                    List<Boolean> otherChildStatus = new ArrayList<Boolean>();
//                    for (int i = 0; i < childSize; i++) {
//                        if (i != childPosition) {
//                            boolean isLastChild1;
//                            if (i == childSize - 1) {
//                                isLastChild1 = true;
//                            } else {
//                                isLastChild1 = false;
//                            }
//                            //获得子item
//                            View view = getChildView(groupPosition, i, isLastChild1, null, null);
//                            CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox);
//                            boolean cbStatus;
//                            if (childCB.isChecked()) {
//                                cbStatus = true;
//                            } else {
//                                cbStatus = false;
//                            }
//                            otherChildStatus.add(cbStatus);
//                        }
//                    }
//                    //设置父Item选项框状态
//                    for (int i = 0; i < otherChildStatus.size(); i++) {
//                        CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox);
//                        if (otherChildStatus.get(i) == false) {
//                            parentCB.setChecked(false);
//                            parentList.get(groupPosition).setIsChecked(false);
//                            break;
//                        } else {
//                            parentCB.setChecked(true);
//                            parentList.get(groupPosition).setIsChecked(true);
//                        }
//                    }
//                    notifyDataSetChanged();
//                } else {
//                    employee.setIsChecked(false);
//                    CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox);
//                    parentCB.setChecked(false);
//                    parentList.get(groupPosition).setIsChecked(false);
//                    notifyDataSetChanged();
//                }
//
//            }
//        });


        return convertView;
    }

    // 获取当前父item下的子item的个数
    @Override
    public int getChildrenCount(int groupPosition) {
        String key = parentList.get(groupPosition).getId();
        int size = map.get(key).size();
        return size;
    }

    // 获取当前父item的数据
    @Override
    public Object getGroup(int groupPosition) {
        return parentList.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return parentList.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    // 设置父item组件
    @Override
    public View getGroupView(final int groupPosition, final boolean isExpanded,
                             View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.report_list_parent_item,
                    null);
        }
        ImageView mgroupimage = BaseViewHolder.get(convertView, R.id.arrow);
        mgroupimage.setImageResource(R.mipmap.la);
        if (!isExpanded) {
            mgroupimage.setImageResource(R.mipmap.shou);
        }
        TextView departmentName = BaseViewHolder.get(convertView, R.id.department_name);
        departmentName.setText(parentList.get(groupPosition).getName());

        final CheckBox cb = BaseViewHolder.get(convertView, R.id.department_checkbox);


        cb.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        System.out.println("点击了父" + groupPosition);
                        CheckBox nowCB = (CheckBox) view;
                        if (nowCB.isChecked()) {
                            //获取子item的数量
                            int childSize = getChildrenCount(groupPosition);
                            //子item全选中
                            for (int i = 0; i < childSize; i++) {
                                //获取子item
                                EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i);
                                child.setIsChecked(true);
                                boolean isLastChild;
                                if (i == childSize - 1) {
                                    isLastChild = true;
                                } else {
                                    isLastChild = false;
                                }
                                //获得子item
                                View view1 = getChildView(groupPosition, i, isLastChild, null, null);
                                CheckBox childCB = (CheckBox) view1.findViewById(R.id.employee_checkbox);
                                childCB.setChecked(true);
                                System.out.println("子" + groupPosition + "-" + i + "  已经选中");

                            }
                            //设置父item被完全选中
                            parentList.get(groupPosition).setIsChecked(true);
                            cb.setChecked(true);
                            System.out.println("父" + groupPosition + "  已经选中");

                            notifyDataSetChanged();
                        } else {
                            //获取子item的数量
                            int childSize = getChildrenCount(groupPosition);
                            //子Item全都不选中
                            for (int i = 0; i < childSize; i++) {
                                //获取子item数据
                                EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i);
                                child.setIsChecked(false);
                                boolean isLastChild;
                                if (i == childSize - 1) {
                                    isLastChild = true;
                                } else {
                                    isLastChild = false;
                                }
                                //获得子item
                                View view2 = getChildView(groupPosition, i, isLastChild, null, null);
                                CheckBox childCB = (CheckBox) view2.findViewById(R.id.employee_checkbox);
                                childCB.setChecked(false);
                                System.out.println("子" + groupPosition + "-" + i + "  已经设为没选中");
                            }
                            parentList.get(groupPosition).setIsChecked(false);

                            notifyDataSetChanged();
                        }
                    }
                }

        );

        int childSize = getChildrenCount(groupPosition);
        List<Boolean> nowChildStatus = new ArrayList<Boolean>();
        nowChildStatus.clear();


//        cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//            @Override
//            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
//                System.out.println("点击了父" + groupPosition);
//                if (isChecked) {
//                    //获取子item的数量
//                    int childSize = getChildrenCount(groupPosition);
//                    //子item全选中
//                    for (int i = 0; i < childSize; i++) {
//                        //获取子item
//                        EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i);
//                        child.setIsChecked(true);
//                        boolean isLastChild;
//                        if (i == childSize - 1) {
//                            isLastChild = true;
//                        } else {
//                            isLastChild = false;
//                        }
//                        //获得子item
//                        View view = getChildView(groupPosition, i, isLastChild, null, null);
//                        CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox);
//                        childCB.setChecked(true);
//                        System.out.println("子" + groupPosition + "-" + i + "  已经选中");
//                    }
//                    //设置父item被完全选中
//                    parentList.get(groupPosition).setIsChecked(true);
//                    cb.setChecked(true);
//                    System.out.println("父" + groupPosition + "  已经选中");
//
//                    notifyDataSetChanged();
//                } else {
//                    //获取子item的数量
//                    int childSize = getChildrenCount(groupPosition);
//                    //子Item全都不选中
//                    for (int i = 0; i < childSize; i++) {
//                        //获取子item数据
//                        EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i);
//                        child.setIsChecked(false);
//                        boolean isLastChild;
//                        if (i == childSize - 1) {
//                            isLastChild = true;
//                        } else {
//                            isLastChild = false;
//                        }
//                        //获得子item
//                        View view = getChildView(groupPosition, i, isLastChild, null, null);
//                        CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox);
//                        childCB.setChecked(false);
//                        System.out.println("子" + groupPosition + "-" + i + "  已经设为没选中");
//                    }
//                    parentList.get(groupPosition).setIsChecked(false);
//
//                    notifyDataSetChanged();
//                }
//
//            }
//        });

//        if (parentList.get(groupPosition).getIsChecked() == 2) {
//            cb.setChecked(true);
//        } else {
//            cb.setChecked(false);
//        }

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }


    //子集是否可选
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}


2个回答

http://blog.csdn.net/u013020402/article/details/50427232 父接点 groupitem事件实现一个机制 点击之后 遍历子节点的setCheck=true

这我自己写的 单元能对你有用。

jmov1
jmov1 谢谢,父节点控制子节点全选和取消我上面代码已经实现了,但是子节点全选控制父节点自动勾选和取消现在代码有问题,可以帮我看一下吗
大约 4 年之前 回复
u011139062
张麻子l 回复jmov1: 请问解决了吗
2 年多之前 回复
jmov1
jmov1 谢谢哈,这个例子我看过,不过并没有我说的实现组列表中checkbox联动那一块,现在解决不了的也就是这个问题
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android ExpandableListView+CheckBox实现组选列表
需要用ExpandableListView+CheckBox实现一个组选列表,ExpandableListView组列表为部门,子列表为成员。需要选中部门的CheckBox时,选中所有组内成员CheckBox,取消时全部取消。选择单个组内成员时,未全部选中该部门成员,则部门CheckBox不勾选,如选中了所有成员,则自动勾选部门CheckBox。希望以前做过的朋友可以给个详细的例子 下面附上我的代码 ``` import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ReportListAdapter extends BaseExpandableListAdapter { private Context context; private List<DepartmentEntity> parentList; private Map<String, List<EmployeeEntity>> map; private List<Boolean> parentStatusList = new ArrayList<Boolean>(); private List<Boolean> childStatusList = new ArrayList<Boolean>(); public ReportListAdapter(Context context, List<DepartmentEntity> parentList, Map<String, List<EmployeeEntity>> map) { this.context = context; this.parentList = parentList; this.map = map; } // 得到子item需要关联的数据 @Override public Object getChild(int groupPosition, int childPosition) { String key = parentList.get(groupPosition).getId(); return (map.get(key).get(childPosition)); } // 得到子item的ID @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } // 设置子item的组件 @Override public View getChildView(final int groupPosition, final int childPosition, final boolean isLastChild, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = View.inflate(context, R.layout.report_list_child_item, null); } String key = this.parentList.get(groupPosition).getId(); final EmployeeEntity employee = map.get(key).get(childPosition); String name = employee.getName(); TextView employeeName = BaseViewHolder.get(convertView, R.id.employee_name); employeeName.setText(name); CheckBox childCB = BaseViewHolder.get(convertView, R.id.employee_checkbox); // if (employee.isChecked()) { // cb.setChecked(true); // } else { // cb.setChecked(false); // } childCB.setChecked(employee.isChecked()); // notifyDataSetChanged(); childCB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CheckBox nowCB = (CheckBox) view; if (nowCB.isChecked()) { employee.setIsChecked(true); // // //获得子item数量 int childSize = getChildrenCount(groupPosition); //其他子item状态 List<Boolean> otherChildStatus = new ArrayList<Boolean>(); otherChildStatus.clear(); for (int i = 0; i < childSize; i++) { if (i != childPosition) { boolean isLastChild1; if (i == childSize - 1) { isLastChild1 = true; } else { isLastChild1 = false; } //获得子item View view1 = getChildView(groupPosition, i, isLastChild1, null, null); CheckBox childCB = (CheckBox) view1.findViewById(R.id.employee_checkbox); boolean cbStatus; if (childCB.isChecked()) { cbStatus = true; } else { cbStatus = false; } otherChildStatus.add(cbStatus); } } //获得父item View parentView1 = getGroupView(groupPosition, true, null, null); //获取父item的cb CheckBox parentCB = (CheckBox) parentView1.findViewById(R.id.department_checkbox); //设置父Item选项框状态 for (int i = 0; i < otherChildStatus.size(); i++) { if (!otherChildStatus.get(i)) { parentList.get(groupPosition).setIsChecked(false); parentCB.setChecked(false); System.out.println("设置父cb不选"); break; } else { parentList.get(groupPosition).setIsChecked(true); parentCB.setChecked(true); notifyDataSetChanged(); System.out.println("设置父cb全选中"); } } notifyDataSetChanged(); } else { //获得父item View parentView = getGroupView(groupPosition, true, null, null); employee.setIsChecked(false); CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox); parentList.get(groupPosition).setIsChecked(false); parentCB.setChecked(false); System.out.println("设置父cb不选"); notifyDataSetChanged(); } } }); // cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { // @Override // public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { // //获得父item // View parentView = getGroupView(groupPosition, true, null, null); // if (isChecked) { // employee.setIsChecked(true); // // //获得子item数量 // int childSize = getChildrenCount(groupPosition); // //其他子item状态 // List<Boolean> otherChildStatus = new ArrayList<Boolean>(); // for (int i = 0; i < childSize; i++) { // if (i != childPosition) { // boolean isLastChild1; // if (i == childSize - 1) { // isLastChild1 = true; // } else { // isLastChild1 = false; // } // //获得子item // View view = getChildView(groupPosition, i, isLastChild1, null, null); // CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox); // boolean cbStatus; // if (childCB.isChecked()) { // cbStatus = true; // } else { // cbStatus = false; // } // otherChildStatus.add(cbStatus); // } // } // //设置父Item选项框状态 // for (int i = 0; i < otherChildStatus.size(); i++) { // CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox); // if (otherChildStatus.get(i) == false) { // parentCB.setChecked(false); // parentList.get(groupPosition).setIsChecked(false); // break; // } else { // parentCB.setChecked(true); // parentList.get(groupPosition).setIsChecked(true); // } // } // notifyDataSetChanged(); // } else { // employee.setIsChecked(false); // CheckBox parentCB = (CheckBox) parentView.findViewById(R.id.department_checkbox); // parentCB.setChecked(false); // parentList.get(groupPosition).setIsChecked(false); // notifyDataSetChanged(); // } // // } // }); return convertView; } // 获取当前父item下的子item的个数 @Override public int getChildrenCount(int groupPosition) { String key = parentList.get(groupPosition).getId(); int size = map.get(key).size(); return size; } // 获取当前父item的数据 @Override public Object getGroup(int groupPosition) { return parentList.get(groupPosition); } @Override public int getGroupCount() { return parentList.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } // 设置父item组件 @Override public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(context, R.layout.report_list_parent_item, null); } ImageView mgroupimage = BaseViewHolder.get(convertView, R.id.arrow); mgroupimage.setImageResource(R.mipmap.la); if (!isExpanded) { mgroupimage.setImageResource(R.mipmap.shou); } TextView departmentName = BaseViewHolder.get(convertView, R.id.department_name); departmentName.setText(parentList.get(groupPosition).getName()); final CheckBox cb = BaseViewHolder.get(convertView, R.id.department_checkbox); cb.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { System.out.println("点击了父" + groupPosition); CheckBox nowCB = (CheckBox) view; if (nowCB.isChecked()) { //获取子item的数量 int childSize = getChildrenCount(groupPosition); //子item全选中 for (int i = 0; i < childSize; i++) { //获取子item EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i); child.setIsChecked(true); boolean isLastChild; if (i == childSize - 1) { isLastChild = true; } else { isLastChild = false; } //获得子item View view1 = getChildView(groupPosition, i, isLastChild, null, null); CheckBox childCB = (CheckBox) view1.findViewById(R.id.employee_checkbox); childCB.setChecked(true); System.out.println("子" + groupPosition + "-" + i + " 已经选中"); } //设置父item被完全选中 parentList.get(groupPosition).setIsChecked(true); cb.setChecked(true); System.out.println("父" + groupPosition + " 已经选中"); notifyDataSetChanged(); } else { //获取子item的数量 int childSize = getChildrenCount(groupPosition); //子Item全都不选中 for (int i = 0; i < childSize; i++) { //获取子item数据 EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i); child.setIsChecked(false); boolean isLastChild; if (i == childSize - 1) { isLastChild = true; } else { isLastChild = false; } //获得子item View view2 = getChildView(groupPosition, i, isLastChild, null, null); CheckBox childCB = (CheckBox) view2.findViewById(R.id.employee_checkbox); childCB.setChecked(false); System.out.println("子" + groupPosition + "-" + i + " 已经设为没选中"); } parentList.get(groupPosition).setIsChecked(false); notifyDataSetChanged(); } } } ); int childSize = getChildrenCount(groupPosition); List<Boolean> nowChildStatus = new ArrayList<Boolean>(); nowChildStatus.clear(); // cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { // @Override // public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { // System.out.println("点击了父" + groupPosition); // if (isChecked) { // //获取子item的数量 // int childSize = getChildrenCount(groupPosition); // //子item全选中 // for (int i = 0; i < childSize; i++) { // //获取子item // EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i); // child.setIsChecked(true); // boolean isLastChild; // if (i == childSize - 1) { // isLastChild = true; // } else { // isLastChild = false; // } // //获得子item // View view = getChildView(groupPosition, i, isLastChild, null, null); // CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox); // childCB.setChecked(true); // System.out.println("子" + groupPosition + "-" + i + " 已经选中"); // } // //设置父item被完全选中 // parentList.get(groupPosition).setIsChecked(true); // cb.setChecked(true); // System.out.println("父" + groupPosition + " 已经选中"); // // notifyDataSetChanged(); // } else { // //获取子item的数量 // int childSize = getChildrenCount(groupPosition); // //子Item全都不选中 // for (int i = 0; i < childSize; i++) { // //获取子item数据 // EmployeeEntity child = (EmployeeEntity) getChild(groupPosition, i); // child.setIsChecked(false); // boolean isLastChild; // if (i == childSize - 1) { // isLastChild = true; // } else { // isLastChild = false; // } // //获得子item // View view = getChildView(groupPosition, i, isLastChild, null, null); // CheckBox childCB = (CheckBox) view.findViewById(R.id.employee_checkbox); // childCB.setChecked(false); // System.out.println("子" + groupPosition + "-" + i + " 已经设为没选中"); // } // parentList.get(groupPosition).setIsChecked(false); // // notifyDataSetChanged(); // } // // } // }); // if (parentList.get(groupPosition).getIsChecked() == 2) { // cb.setChecked(true); // } else { // cb.setChecked(false); // } return convertView; } @Override public boolean hasStableIds() { return true; } //子集是否可选 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } ```
Android ExpandableListView点击列表项改变列表项内组件产生混乱的问题
//ExpandableListView的适配器 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub GroupViewHolder gvholder; if (convertView == null) { gvholder = new GroupViewHolder(); convertView = LinearLayout.inflate(getBaseContext(), R.layout.group_layout, null); gvholder.groupcity = (TextView) convertView .findViewById(R.id.group_title); gvholder.groupsize = (TextView) convertView .findViewById(R.id.groupcap); gvholder.groupload = (ImageView) convertView .findViewById(R.id.group_state); convertView.setTag(gvholder); } else { gvholder = (GroupViewHolder) convertView.getTag(); } // ExpandableListView 的OnGroupClick监听 allcitylists.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { // TODO Auto-generated method stub group_checked[groupPosition] = group_checked[groupPosition] + 1; ((BaseExpandableListAdapter) expadapter).notifyDataSetChanged(); if (groupPosition < 5 || groupPosition >= provincelist.size() - 3) { ArrayList<MKOLSearchRecord> records = mOffline .searchCity(provincelist.get(groupPosition).get(0)); if (records != null && records.size() == 1) { cityid = records.get(0).cityID; mOffline.start(cityid); updateView(); //改变的组件 TextView loadtext = (TextView) v .findViewById(R.id.group_loadtitle); loadtext.setVisibility(View.VISIBLE); changeloadtext(loadtext, cityid); } } return false; } }); 内容比较多,没贴完,但关键的地方都在上面,点击列表项能够把loadtext显示出来,但是上下滑动之后,显示的就不是我刚刚点击的那个列表项的TextView,而是其他列表项的Textview,应该是不能在这里用ViewHolder,但是我也想不出来怎么改变,请各位大神指教指教
Android expandablelistview 点击了groupview的一项却展开另外一项
Android expandablelistview ,在4.2上正常运行,在2.3.3上点击了groupview的一项却展开另外一项,在4.2上正常运行有人说是索引乱了,请问我该怎么解决啊,跪求大神。
Android 用ExpandableListView 实现二级列表 。。。。
这个是打印出来的Log: ![图片说明](https://img-ask.csdn.net/upload/201611/08/1478576555_191241.png) 这是报错的那行代码![图片说明](https://img-ask.csdn.net/upload/201611/08/1478576753_430219.png)
android如何实现二级多选列表
各位大神,小弟想通过自定义ExpandableListView实现二级多选列表。 详细功能如下: 1.点击一级列表则展开/收起二级列表(与ExpandableListView原属性不变) 2.长安一级列表则选中当前列表及当前列表下所有二级列表数据(界面作出相应变化) 3.可单独选中二级列表数据
android expandablelistview二级目录点击跳转另一个activity
比如点击“妹妹”跳转一个新的聊天界面package com.czu.chat; import android.app.ExpandableListActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.LinearLayout; import android.widget.SimpleExpandableListAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by 布丁 on 2016/5/30. */ public class ExpandActivity extends ExpandableListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.two); //创建二个一级条目标题 Map<String, String> title_1 = new HashMap<String, String>(); Map<String, String> title_2 = new HashMap<String, String>(); title_1.put("group", "家人"); title_2.put("group", "宠物"); //创建一级条目容器 List<Map<String, String>> gruops = new ArrayList<Map<String, String>>(); gruops.add(title_1); gruops.add(title_2); //创建二级条目内容 //内容一 Map<String, String> content_1 = new HashMap<String, String>(); Map<String, String> content_2 = new HashMap<String, String>(); content_1.put("child", "姐姐"); content_2.put("child", "妹妹"); List<Map<String, String>> childs_1 = new ArrayList<Map<String, String>>(); childs_1.add(content_1); childs_1.add(content_2); //内容二 Map<String, String> content_3 = new HashMap<String, String>(); Map<String, String> content_4 = new HashMap<String, String>(); content_3.put("child", "猫咪"); content_4.put("child", "汪汪"); List<Map<String, String>> childs_2 = new ArrayList<Map<String, String>>(); childs_2.add(content_3); childs_2.add(content_4); //存放两个内容, 以便显示在列表中 List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>(); childs.add(childs_1); childs.add(childs_2); //创建ExpandableList的Adapter容器 //参数: 1.上下文 2.一级集合 3.一级样式文件 4. 一级条目键值 5.一级显示控件名 // 6. 二级集合 7. 二级样式 8.二级条目键值 9.二级显示控件名 SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter( this, gruops, R.layout.groups, new String[]{"group"}, new int[]{R.id.textGroup}, childs, R.layout.childs, new String[]{"child"}, new int[]{R.id.textChild} ); //加入列表 setListAdapter(sela); }
android sqlite expandablelistview
我想做一个expandablelistview,有a表,是部门表,主键是部门id,然后还有b表,是员工表,有键pid,对应表a的部门id,怎么把他们放到expandablelistview里,然后父布局是放部门的,子部门是放员工的?如何查询?
expandablelistview和checkbox结合使用,复用问题,头疼好几天,大神帮帮忙啊
了viewholder复用了,当子项滑出范围,选中的checkbox变为未选中,不过选中的删除时删除是正确的,只是这样重复选择(不知道怎么说),体验不好,头疼好几天了 expandablelistviewadapter代码如下: 关键代码: ``` /* * 解决复用问题的关键代码,那里好像出错了。导致自动让滑出屏幕的checkbox不选,这里 */ if (checkposition!=null) { itemHolder.cb.setChecked(checkposition.contains(itemHolder.cb.getText().toString())?true:false); } else{ itemHolder.cb.setChecked(false); } itemHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { String i = itemHolder.cb.getText().toString(); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { if (!checkposition.contains(i)) { idlists.add(i); checkposition.add(i); } Fragment1.tv.setText("您已选中"+idlists.size()+"个联系人"); } else{ if (checkposition.contains(i)) { idlists.remove(i); checkposition.remove(i); } Fragment1.tv.setText("您已选中"+idlists.size()+"个联系人"); } } }); ``` 适配器完整代码: ``` package com.daisy.work.adapter; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import com.daisy.work.R; import com.daisy.work.atys.fragments.Fragment1; import com.daisy.work.db.ContactDB; public class MyExpandableListViewAdapter extends BaseExpandableListAdapter { private Context context; private Cursor cursor; private ArrayList<String> group_list; private ArrayList<List<Integer>> gr_list2; private ContactDB ctDB; private SQLiteDatabase dbRead; private ItemHolder itemHolder; public ArrayList<String> idlists; public List<String> checkposition; public MyExpandableListViewAdapter(Context context, Cursor cursor) { this.context = context; this.cursor = cursor;//cursor用来获取填充childview的数据 ctDB = new ContactDB(context); dbRead = ctDB.getReadableDatabase(); idlists = new ArrayList<String>();//用来记录checkboxbox的值,和数据库的name一列的值相同,便于删除 checkposition = new ArrayList<String>();//用来解决复用滑动错乱问题 group_list = new ArrayList<String>();//填充组 group_list.add("默认"); group_list.add("亲人"); group_list.add("同事"); group_list.add("同学"); group_list.add("客户"); List<Integer> gr_list = new ArrayList<Integer>(); gr_list.add(R.drawable.tree_ec); gr_list.add(R.drawable.tree_ec); gr_list.add(R.drawable.tree_ec); gr_list.add(R.drawable.tree_ec); gr_list.add(R.drawable.tree_ec); gr_list2 = new ArrayList<List<Integer>>();//{{1,2,3,4,5},{1,2,3,4,5}...} gr_list2.add(gr_list); gr_list2.add(gr_list); gr_list2.add(gr_list); gr_list2.add(gr_list); gr_list2.add(gr_list); } @Override public int getGroupCount() { return group_list.size(); } @Override public int getChildrenCount(int groupPosition) { String belong = group_list.get(groupPosition);//将特定的数据填充到分组中,用belong标识。 Cursor c = dbRead.query(ContactDB.CONTACT_TABLE_NAME, null, "belong like ?", new String[] { "%" + belong + "%" }, null, null, null); if (!c.moveToFirst()) { return 0; } else { return c.getCount(); } } @Override public Object getGroup(int groupPosition) { return group_list.get(groupPosition); } //多考虑一下 @Override public Object getChild(int groupPosition, int childPosition) { return getCombinedChildId(getGroupId(groupPosition),childPosition);//这个没搞太明白,填什么都不会出错 } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupHolder groupHolder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.expendlist_group, null); groupHolder = new GroupHolder(); groupHolder.txt = (TextView) convertView.findViewById(R.id.txt); groupHolder.txt2 = (TextView) convertView.findViewById(R.id.txt2); groupHolder.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(groupHolder); } else { groupHolder = (GroupHolder) convertView.getTag(); } if (!isExpanded) { groupHolder.img.setBackgroundResource(R.drawable.tree_ec); } else { groupHolder.img.setBackgroundResource(R.drawable.tree_ex); } String belong = group_list.get(groupPosition); cursor = dbRead.query(ContactDB.CONTACT_TABLE_NAME, null, "belong like ?", new String[] { "%" + belong + "%" }, null, null, null); int nm = cursor.getCount();//获取特定组中子项的数目。 groupHolder.txt.setText(group_list.get(groupPosition)); groupHolder.txt2.setText(nm + "");//显示组中子项的数目。 return convertView; } @Override public View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { itemHolder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.expendlist_item,null); itemHolder = new ItemHolder(); itemHolder.ct_name = (TextView) convertView .findViewById(R.id.ct_name); itemHolder.ct_qq = (TextView) convertView.findViewById(R.id.ct_qq); itemHolder.iv = (ImageView) convertView.findViewById(R.id.iv); itemHolder.dial = (ImageButton) convertView.findViewById(R.id.dial); itemHolder.cb = (CheckBox) convertView.findViewById(R.id.cb); itemHolder.cb.setTag(itemHolder.cb.getText().toString());//child_item布局里的checkbox控件 convertView.setTag(itemHolder); } else { itemHolder = (ItemHolder) convertView.getTag(); } String belong = group_list.get(groupPosition); cursor = dbRead.query(ContactDB.CONTACT_TABLE_NAME, null, "belong like ?", new String[] { "%" + belong + "%" }, null, null, null); if (!cursor.moveToFirst()) { return null; } else { cursor.moveToPosition(childPosition); if (Fragment1.xs_bs.isShown()) {//按多选时将checkbox展现出啦,取消则隐藏xs_bs在adapter中无法获取,把它设为了public static itemHolder.cb.setChecked(false); itemHolder.cb.setVisibility(CheckBox.GONE); } else { itemHolder.cb.setVisibility(CheckBox.VISIBLE); itemHolder.dial.setOnClickListener(null); } if(Fragment1.qx.isPressed()){ //取消则隐藏 itemHolder.cb.setChecked(false); } //显示子项中的数据 itemHolder.ct_name.setText(cursor.getString(cursor .getColumnIndex("name"))); itemHolder.cb.setText(cursor.getString(cursor .getColumnIndex("name"))); itemHolder.ct_qq.setText(cursor.getString(cursor .getColumnIndex("qq"))); itemHolder.iv.setBackgroundResource(R.drawable.ic_ct); //按钮,由于其特殊性(在expandablelistview子项中的控件,在adapter中设置监听) itemHolder.dial.setOnClickListener(new View.OnClickListener() { String phone = cursor.getString(cursor.getColumnIndex("phone")); @Override public void onClick(View v) { context.startActivity(new Intent(Intent.ACTION_DIAL, Uri .parse("tel:" +phone))); } }); /* * 解决复用问题的关键代码,那里好像出错了。导致自动让滑出屏幕的checkbox不选,这里 */ if (checkposition!=null) { itemHolder.cb.setChecked(checkposition.contains(itemHolder.cb.getText().toString())?true:false); } else{ itemHolder.cb.setChecked(false); } itemHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { String i = itemHolder.cb.getText().toString(); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { if (!checkposition.contains(i)) { idlists.add(i); checkposition.add(i); } Fragment1.tv.setText("您已选中"+idlists.size()+"个联系人"); } else{ if (checkposition.contains(i)) { idlists.remove(i); checkposition.remove(i); } Fragment1.tv.setText("您已选中"+idlists.size()+"个联系人"); } } }); return convertView; } } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class GroupHolder { public TextView txt; public TextView txt2; public ImageView img; } class ItemHolder { public ImageView iv; public TextView ct_name; public TextView ct_qq; public ImageButton dial; public CheckBox cb; } } ``` ![图片说明](https://img-ask.csdn.net/upload/201605/16/1463356167_782724.png)
Android的expandablelistview的Group展开与收起的背景颜色如何设置?
我想要让expandablelistview的group项展开时为绿色,收起时为白色,自己也有找一些网上的例子,很多人都说用Selector,我用了只能在点击时修改颜色,松开就没了,求大神教教我。。
ExpandableListView结合checkBox如何解决复用引起的问题
当点击了第0个position的时候 第二组的第0个也被勾选了
Android 修改Expandablelistview二级列表项中的EditText的内容
如何通过一级列表项中的按钮保存对应所有二级列表项修改后的内容。或者有没有其他办法,比如判断EditText的焦点,当失去焦点时保存新内容,反正,就是不能在每个二级列表项后面都加个保存按钮
Scollview嵌套 ExpandableListview
Scollview嵌套 ExpandableListView 通过重新ExpandableListView 的onMeasure方法解决现实问题 但是在Android2.3服务器报错 super.onMeasure(widthMeasureSpec, expandSpec); 在onMeasure方法的最后一句报类型转换异常 (上面的这句)
怎么调整ExpandableListView item的间距
程序里出用到了树型组件,经过运行感觉组件各个item的间距太小,想要把间距条大一点,想问一下该怎么调整? 我的树形组件是这样配置的: <ExpandableListView android:id="@+id/el_service_choice_listview" android:layout_width="fill_parent" android:layout_weight="1" android:cacheColorHint="#00000000" android:divider="@drawable/seperator" android:fadingEdge="none" /> 组件内容布局代码是这样写的: private TextView buildTextView() { AbsListView.LayoutParams params = new AbsListView.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); TextView textView = new TextView(this.context) ; textView.setLayoutParams(params) ; textView.setTextSize(18.0f) ; textView.setTextColor(R.color.black); textView.setGravity(Gravity.LEFT) ; textView.setPadding(40, 5, 3, 5) ; return textView ; } 请问我该怎么改,才能扩大间距呢?(最好能够在xml文件里实现) 还有我在配置文件里加上下面的属性,会报错,请问是什么原因? android:dividerHeight="10dp"
[Android]ExpandableListView消息响应出错!麻烦帮忙看下!
final ExAdapter listAdapter = new ExAdapter(MeterOperateActivity.this); buttonListView.setAdapter(listAdapter); buttonListView.setGroupIndicator(null); buttonListView.setDivider(null); buttonListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) { for (int i = 0; i < listAdapter.getGroupCount(); i++) { if (groupPosition != i) { if(buttonListView.isGroupExpanded(i)){ buttonListView.collapseGroup(i); } } } return false; } }); 代码如上, 我想实现,一个分组展开时,其余分组收起!结果出现问题,错误如下: ![CSDN移动问答][1] [1]: http://img.my.csdn.net/uploads/201306/09/1370769728_8441.png
安卓中树状多选为什么点击任何一个父类已选定的子类就会变成未选中状态
rt我在做expandablelistview+checkbox实现全选多选的功能,现在只写了listview的childonclick事件,子项已经可以选择,但是每当我点击任何一个父项时,已选中的子项都会变成未选中,百思不得其解。请各位大神帮帮忙!!谢谢了,因为我是个新手,也是刚刚工作,有很多不懂得。麻烦了!谢谢
Expandablelistview三级列表,如何动态打开第三层?走过路过的戳进来看看。
Expandablelistview嵌套做成三级列表,该如何动态打开第三层? 因为在展开前我会把列表全部合并,然后再打开指定的第三层,构思的代码如下,但没有起效果。望各路程序大神指点指点! ``` for (int i = 0; i < mLv.getChildCount(); i++) { View item = mLv.getChildAt(i); if (item instanceof CustomExpandableListView) { Log.d("bigname", "openChooseExpandableItem: *************是expandbalelistview"); CustomExpandableListView subLv = (CustomExpandableListView) item; subLv.getExpandableListAdapter().onGroupExpanded(searchResultModel.getSecondPosition()); } } ```
怎么将ExpandableListView左边的倒三角放置到右边右边
怎么将ExpandableListView左边的倒三角放置到右边 <ExpandableListView android:id="@+id/el_option" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/beijingnihao"> </ExpandableListView> 上面是布局文件,下面是group的布局文件 <ImageView android:id="@+id/imageView_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pengxin" /> <TextView android:id="@+id/textView_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>
expandableListView 二级列表设置不同样式的布局?
expandableListView 二级列表设置不同样式的布局? 最好附源码
ExpandableListView问题
怎么修改 ExpandableListView一级菜单分割线的颜色,着急,在线等
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
MySQL数据库总结
文章目录一、数据库简介二、MySQL数据类型(5.5版本)三、Sql语句(1)Sql语句简介(2)数据定义语言DDLcreate,alter,drop(3)数据操纵语言DMLupdate,insert,delete(4)数据控制语言DCLgrant,revoke(5)数据查询语言DQLselect(6)分组查询与分页查询group by,limit四、完整性约束(单表)五、多表查询六、MySQL数
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问