【问题标题】:Android Studio adding "Switch" to child group of ExpandableListViewAndroid Studio 将“Switch”添加到 ExpandableListView 的子组
【发布时间】:2016-04-22 19:59:00
【问题描述】:

我用 textView 制作了 expandablelistview 并在子组中切换。 我想使用开关的状态(开或关)来控制连接到 ESP8266 WiFi 模块的设备。 如何存储开关数据以在其他地方使用?

适配器java文件:

public class AdpMain extends BaseExpandableListAdapter {
    private Context context;
    private ArrayList<String> arrayGroup;
    private HashMap<String, ArrayList<String>> arrayChild;

    public AdpMain(Context context, ArrayList<String> arrayGroup, HashMap<String, ArrayList<String>> arrayChild) 
    {
        super();
        this.context = context;
        this.arrayGroup = arrayGroup;
        this.arrayChild = arrayChild;
    }

    ...

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
    {
        String childName = arrayChild.get(arrayGroup.get(groupPosition)).get(childPosition);
        View v = convertView;

        if(v == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = (RelativeLayout)inflater.inflate(R.layout.activity_listview_child, null);
    }
        TextView textChild = (TextView)v.findViewById(R.id.textChild);
        textChild.setText(childName);

        return v;
    }

}

【问题讨论】:

标签: android android-studio expandablelistview android-switch


【解决方案1】:

您必须首先从您的activity_listview_child xml 文件中在getChildView() 中注册switch id。假设您在xml 文件中的switch id 是switchChild 然后使用以下代码:

     @Override
                public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
                {
        ChildHolder childHolder;
                    String childName = arrayChild.get(arrayGroup.get(groupPosition)).get(childPosition);

                    if(convertView == null) 
        {
                        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        convertView = inflater.inflate(R.layout.activity_listview_child, null);
                childHolder = new ChildHolder();
                    childHolder.textChild = (TextView)convertCiew..findViewById(R.id.textChild);
        childHolder.switchChild = (Switch)convertCiew..findViewById(R.id.switchChild);

        converView.setTag(childHolder)
            }
        else
        {
        childHolder = (ChildHolder)convertView.getTag();
        }
        childHolder.textChild.setText(childName);
    childHolder.switchChild.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View view) 
                        {
                            //whatever you want do for switch code here
mListener.OnSwitchClick(groupPosition, childPosition,childHolder.switchChild.isChecked());
                        }
                    });
                    return convertView;
                }

        private static class ChildHolder
        {
        TextView textChild;
        Switch switchChild;
        }

希望对你有帮助

【讨论】:

  • 感谢您的帮助!!嗯..是否可以为子组中的开关设置不同的名称?我想让每个开关做不同的行为..
  • 是的....你可以做到。您可以根据需要为每个view 设置不同的功能。
  • 我的意思是我可以在 mainActivity 中而不是在适配器文件中使用单个开关吗?在Adapter文件中添加所有代码太复杂了:(
  • 没有它糟糕的设计.....如果你的xml 'switch' 文件在adapter 中,那么尝试仅在adapter 中定义它的功能。对于每个switch 的不同功能,您可以定义不同的功能interface。创建一个interface 类,例如onSwichClickListener,其中创建一个abstract 方法,例如OnSwichClick(int groupPosition, int childPosition, boolean isChecked) 。在adapter 类的“构造函数”中定义此接口,并在onClickListenerswitch 中实现该侦听器,再次参见代码(在childHolder.switchChild.setOnClickLisner 中)。希望对你有帮助
  • 非常感谢!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2012-04-01
相关资源
最近更新 更多