【问题标题】:ImageView Button Toggle in AndroidAndroid中的ImageView按钮切换
【发布时间】:2012-05-03 19:23:45
【问题描述】:

我正在尝试在单击 ImageView 按钮时进行切换。我有以下代码:

    ImageView button01 = (ImageView) findViewById(R.id.button01);
    button01.setOnClickListener(new OnClickListener() {
        int button01pos = 0;
        public void onClick(View v) {
            if (button01pos == 0) {
                button01.setImageResource(R.drawable.image01);
                button01pos = 1;
            } else if (button01pos == 1) {
                button01.setImageResource(R.drawable.image02);
                button01pos = 0;
            }
        }
    });

但由于某种原因 button01 在 Eclipse 中带有红色下划线,它给出了错误:

不能引用内部类中的非最终变量 button01 用不同的方法定义

有谁知道它为什么会这样以及如何解决它?

谢谢

【问题讨论】:

  • 在 ImageView button01 前面添加 final...“final ImageView button01”。完成。
  • 抱歉,它起作用了...但是现在由于某种原因,当我在按钮上单击两次时它停止切换并且 Eclipse 抛出此错误: ActivityManager: Warning: Activity not started, its current task has been到前面
  • 这只是意味着它启动了您已经安装的应用程序并将其带到了前面。并不是真正的错误。有点误导。
  • 它会切换一次,然后就再也不会工作了。这样做的原因是因为“int button01pos = 0;”被放置在 onClickListener 内,因此它重置为 0,然后保持为 0。如果我将它移到 onClickListener 之外,那么它需要是最终的,这使得它无法切换。
  • 它不应该停留在 0。onClickListener 只被初始化一次,所以它永远不会“重置”为 0。唯一的方法是如果你有一个项目的列表视图,它们在哪里得到滚动时滚动并重新初始化。我自己在我的设备上进行了测试,使用您的代码可以正常工作。

标签: android button imagebutton


【解决方案1】:

这是工作代码:

final ImageView button01 = (ImageView) findViewById(R.id.button01);
button01.setOnClickListener(new OnClickListener() {
    int button01pos = 0;
    public void onClick(View v) {
        if (button01pos == 0) {
            button01.setImageResource(R.drawable.image01);
            button01pos = 1;
        } else if (button01pos == 1) {
            button01.setImageResource(R.drawable.image02);
            button01pos = 0;
        }
    }
});

【讨论】:

    【解决方案2】:

    试试这个,

            int button01pos = 0;
    
            ImageView button01 = (ImageView) findViewById(R.id.button01);
            button01.setOnClickListener(new OnClickListener() {
    
            public void onClick(View v) {
                if (button01pos == 0) {
                    button01.setImageResource(R.drawable.image01);
                    button01pos = 1;
                } else if (button01pos == 1) {
                    button01.setImageResource(R.drawable.image02);
                    button01pos = 0;
                }
            }
        });
    

    【讨论】:

      【解决方案3】:

      试试这个,它对我有用。这里复选框可见性设置为“不可见”......! 此代码在按钮 OnClickListener 内...!

      @Override
      public void onClick(View v) {
      
          ImageView iv_icon = (ImageView) findViewById(R.id.icon);
      
          CheckBox cb = (CheckBox) findViewById(R.id.cb);
      
          if (cb.isChecked()) {
              iv_icon.setImageResource(R.drawable.image01);
              cb.setChecked(false);
          } else if (!cb.isChecked()) {
              iv_icon.setImageResource(R.drawable.image02);
              cb.setChecked(true);
          } else {
              // Nothing happens
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-24
        • 2010-10-08
        • 2011-01-17
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        相关资源
        最近更新 更多