最近做一个项目,顶部类似于网易新闻一样动态添加n个菜单,下面是viewpager,滑动切换,需求是要在菜单上显示数字表示新闻数目,问题是使用第三方的BadgeView后点击切换失败。
经过调试发现,控件添加了BadgeView后再去获该控件 View checkView = mRadioGroup_content.getChildAt(j);是获取失败的。Log打印Id为-1.说明获取失败,并且获取到的为FrameLayout。
网上百度了好久,发现,BadgeView相当于在原控件基础上添加了一层Framelayout,而且我尝试给这个BadgeView seId()后获取还是失败的。
解决方法:
相当于投机取巧,转换了一下思维,首先用一个List来存储生成的控件,
List<TextView>list=new ArrayList<TextView>();
list.add(columnTextView);
BadgeView badgeView = new BadgeView(this,columnTextView);
badgeView.setText(scale.get(i).getUnreadCount());
badgeView.setTextSize(7);
badgeView.setId(i);
badgeView.setBadgePosition(BadgeView.POSITION_TOP_RIGHT);
badgeView.show();
然后在获取控件或者进行选中处理时,直接获取list中的值 list.get(j).setSelected(ischeck);就替代了 View checkView = mRadioGroup_content.getChildAt(j);
完美!over。