一个视图被“神秘地”剥离了它的标签

时间:2014-02-09 12:38:30

标签: android android-viewpager

我有一组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;
  }

正如您所看到的,当我尝试删除它们时,显然这些视图没有设置标记 我不知道为什么标签无法正常工作。就我的代码而言,它不会被重置,也不会重新创建或删除传递的视图。

如果是这样,可能是这个问题的根源,我该如何解决呢?

1 个答案:

答案 0 :(得分:2)

您无法使用==比较字符串内容。 String是一个对象,相等运算符测试2个对象是否是同一个对象,而不是它们的内容是否相同。相反,请使用.equals()

if(view.getTag().equals(tag))

您还应该学习如何使用调试器并逐步执行代码,然后您会看到标记仍然存在,因此if语句必须失败。