我有一组ToggleButton
和一个ViewPager
我想在单击切换时添加视图并将其状态更改为已选中。
我设法做到了,现在我想在取消选中时删除与ToggleButton
相关联的视图。我尝试在将视图添加到ViewPager之前在视图上设置标记。
以下是一些代码:
((ToggleButton) ((RelativeLayout) mDaysTableLayoutTableRow.getChildAt(i)).getChildAt(0)).setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
if(mDaysViewPager == null) {
mDaysViewPager = new ViewPager(getActivity());
mLinearLayoutRoot.addView(mDaysViewPager, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mPagerAdapter = new DaysPagerAdapter();
mDaysViewPager.setAdapter(mPagerAdapter);
}
if (mDaysViewPager != null) {
ScrollView mView = new ScrollView(getActivity());
TextView mTV = new TextView(getActivity());
mTV.setText(buttonView.getText());
mView.addView(mTV);
mView.setTag(buttonView.getText());
Log.i("tags:", "" + mView.getTag()); //works
mPagerAdapter.addView(mView);
mPagerAdapter.notifyDataSetChanged();
}
} else if(!isChecked) {
mPagerAdapter.removeView(mDaysViewPager, buttonView.getText());
mPagerAdapter.notifyDataSetChanged();
}
}
});
removeView()
和addView()
:
public void removeView(ViewPager pager, Object tag)
{
pager.setAdapter(null);
for(int i = 0; i < views.size(); i++) {
Log.i("tags:", "view: " + view.getTag() + ", func: " + tag); // Returns "view: null, func: xxx" where xxx is the correct tag
if(view.getTag() == tag) {
Log.i("tags:", "in"); // never fires
views.remove(i);
}
}
pager.setAdapter(this);
}
public int addView(View v, int position)
{
views.add(position, v);
return position;
}
正如您所看到的,当我尝试删除它们时,显然这些视图没有设置标记 我不知道为什么标签无法正常工作。就我的代码而言,它不会被重置,也不会重新创建或删除传递的视图。
如果是这样,可能是这个问题的根源,我该如何解决呢?
答案 0 :(得分:2)
您无法使用==
比较字符串内容。 String
是一个对象,相等运算符测试2个对象是否是同一个对象,而不是它们的内容是否相同。相反,请使用.equals()
。
if(view.getTag().equals(tag))
您还应该学习如何使用调试器并逐步执行代码,然后您会看到标记仍然存在,因此if
语句必须失败。