仅为在开发过程中对使用鸿洋大神的TagFlowLayout中出现的新问题做一个笔记!
废话不多说,修改调整后的代码先上
if (mBeanTagAdapter == null) {
mBeanTagAdapter = new TagAdapter<CategoryBean>(mCategoryBeansList) {
@Override
public View getView(FlowLayout parent, final int position, CategoryBean str) {
final View view;
view = LayoutInflater.from(mActivity).inflate(R.layout.item_evaluation_history, null, false);
final TextView textView = view.findViewById(R.id.tv_item_evaluation_history);
textView.setText(str.getTitle());
return view;
}
};
mFlowLayout.setOnTagClickListener(new TagFlowLayout.OnTagClickListener() {
@Override
public boolean onTagClick(View view, int position, FlowLayout parent) {
mSelectPosStr = mCategoryBeansList.get(position).getTitle();
mEvaluateET.setText(mALLSelectEditStr);
return true;
}
});
mFlowLayout.setOnSelectListener(new TagFlowLayout.OnSelectListener() {
@Override
public void onSelected(Set<Integer> selectPosSet) {
//获得所有选中的position集合,例如[1,2,3,4]
Set<Integer> selectedList = selectPosSet;
mALLSelectEditStr = new StringBuffer("");
for (Integer num : selectedList) {
LogUtil.e(TAG, num + " ");
mSelectPos=num;
mSelectPosStr = mCategoryBeansList.get(mSelectPos).getTitle();
mALLSelectEditStr.append(mSelectPosStr + " ");
}
mEvaluateET.setText(mALLSelectEditStr);
}
});
mFlowLayout.setAdapter(mBeanTagAdapter);
} else {
mBeanTagAdapter.notifyDataChanged();
}
可能一看到这个就会纳闷了,这和你说的问题有毛线关系??嗯?上面的代码也是我改了之后的,这里说明一下问题出现在多选点击事件监听方法中,并且采用获取多选点击内容的方式不一样,即为:
Iterator<Integer> iterator = selectedList.iterator();
for (iterator.hasNext();) {
LogUtil.e(TAG,"iterator.hasNext()="+iterator.next());
if (iterator.hasNext()){
mSelectPos=(int)iterator.next();
mSelectPosStr=mCategoryBeansList.get(mSelectPos).getTitle();
mALLSelectEditStr.append(mSelectPosStr);
}
}
运行就会出现java.util.NoSuchElementException异常,具体原因网上也是可以搜到就不说了,关键是知道这个问题后怎么去更好的解决。其实也是网上也说得清楚,但是对于我这个菜鸟来说,细一看还不如咋一看。自己这里的解决:直接在外出的for循环修改一下
for (Iterator<Integer> iterator = selectedList.iterator();iterator.hasNext();)
运行!OK 但是我发现这样写太麻烦了,而且调试好数据加大了代码量 ,所以最后还是放弃了该写法。