【问题标题】:Issues in Expandable listview with checkbox带有复选框的可扩展列表视图中的问题
【发布时间】:2016-07-26 14:12:46
【问题描述】:

我的要求是当我同时选择父 CheckBox 选择子 CheckBoxes 时。但我点击父 checkbox 它没有选择子复选框。这个怎么做 ?任何人都可以提出建议。

这是我的代码

   public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, final ViewGroup parent) {
    final String headerTitle = (String)getGroup(groupPosition);
    ParentViewHolder cv = null;
    if (convertView == null)
    {
        LayoutInflater li = (LayoutInflater)Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(R.layout.group_list,null);
      cv  = new ParentViewHolder();
       cv.text = (TextView)convertView.findViewById(R.id.groupTitle);
        cv.text.setTypeface(null, Typeface.BOLD);
        cv.text.setText(headerTitle);
        cv.parentCheckbox =       (CheckBox)convertView.findViewById(R.id.groupCheckbox);

        convertView.setTag(cv);
        cv.parentCheckbox.setTag(groupPosition);
        cv.parentCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(((CheckBox)v).isChecked())
                {
                    Log.e("TAG","clicked");
                        groupitem.itemClick(groupPosition, true);
                    Toast.makeText(Context.getApplicationContext(),   headerTitle+"success", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
    else
    {

    }

        return convertView;
} 

【问题讨论】:

标签: android checkbox expandablelistview


【解决方案1】:

我做了一些与您的要求相同的逻辑。你可以像下面这样:

 /*******************
 * Checkbox Checked Change Listener
 ********************/

private final class CheckUpdateListener implements CompoundButton.OnCheckedChangeListener {
    private final ParentModel parent;
    private  final ArrayList<ChildModel> childs;

    private CheckUpdateListener(ParentModel parent,ArrayList<ChildModel> childs) {
        this.parent = parent;
        this.childs=childs;


    }


    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Log.i("onCheckedChanged", "isChecked: " + isChecked);


        parent.setChecked(isChecked);
        for(int i=0;i<childs.size();i++)
        {
            childs.get(i).setChildChecked(isChecked);
        }
        Log.i("TAG", "CHILD SIZE=>" + parent.getChildList().size());


        notifyDataSetChanged();


    }
}


private class ChildCheckUpdateListener implements CompoundButton.OnCheckedChangeListener {
    private final ParentModel parentModel;
    private final ChildModel childModel;

    public ChildCheckUpdateListener(ChildModel child, ParentModel model) {
        this.parentModel = model;
        this.childModel = child;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (!parentModel.isChecked()) {
            childModel.setChildChecked(isChecked);
        }
        notifyDataSetChanged();
    }
}

您只需要从 getGroupView 和 getChildview 方法调用它,如下所示:

从组视图

  groupViewHolder.chkbox.setOnCheckedChangeListener(new CheckUpdateListener(parent,childs));

来自 ChildView

childViewHolder.childChk.setOnCheckedChangeListener(new ChildCheckUpdateListener(child, model));

【讨论】:

  • 当我点击第一个父项时,它显示正确的列表。当我点击第二个父项时,它显示第一个和第二个父项中的第二个父项数据如何解决
  • @A.asha 抱歉。我没有告诉你你到底面临什么问题
  • 假设 Foodmenu 是那个汉堡的父项,piza 是列表子菜单,还有一个父项 Shop menu 在那个蔬菜店,非蔬菜店是列表 submneu。现在当我点击 Foodmenu 它显示正确的数据.next 我点击 Shopmenu 它显示商店菜单数据,但在 Foodmenu 数据更改它显示商店菜单数据
  • 那么你在getchildview方法中犯了错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多