You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:点击切换图片时Integer变量无法自增求助

问题分析与解决方案

嘿,我一眼就揪出问题所在啦!你看,在每次点击触发的bbd方法里,第一行就写了i = 1;——这意味着每次点击按钮时,变量i都会被强制重置为1,不管之前它的值是多少。

咱们捋一遍实际执行流程就懂了:

  • 第一次点击:i被设为1,进入if (i == 1)块,i自增到2,执行第一个动画逻辑。但方法执行完后,这个i的变化确实生效了,可下次点击时,又会被重新赋值为1。
  • 后续所有点击:i永远从1开始,永远只会进入第一个if分支,你在日志里看到的i值是赋值后的1,自然会觉得“自增没起作用”。

修复方案

把i的初始化移到onCreate方法里,只在页面创建时初始化一次,而不是每次点击都重置:

public class MainActivity extends AppCompatActivity { 
    public int i; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        // 仅在页面初始化时设置i的初始值
        i = 1; 
    } 

    public void bbd(View view) { 
        Log.d(" value of i is ", String.valueOf(i)); 
        if (i == 1) { 
            i++; 
            ImageView img2 = (ImageView) findViewById((R.id.cc)); 
            img2.animate().alpha(0f).setDuration(2000); 
            ImageView img = (ImageView) findViewById(R.id.bb); 
            img.animate().alpha(1f).setDuration(2000); 
        } else if (i == 2) { 
            ImageView img = (ImageView) findViewById(R.id.bb); 
            ImageView img2 = (ImageView) findViewById((R.id.cc)); 
            img.animate().alpha(0f).setDuration(2000); 
            img2.animate().alpha(1f).setDuration(2000); 
            i--; 
        } 
    } 
}

额外优化建议

其实用整数来控制状态容易出现边界错误,你可以考虑用布尔变量让逻辑更清晰直观:

public class MainActivity extends AppCompatActivity { 
    // 用布尔变量标记当前显示的是哪张图
    private boolean isFirstImageVisible = true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    } 

    public void bbd(View view) { 
        ImageView img = findViewById(R.id.bb); 
        ImageView img2 = findViewById(R.id.cc); 
        
        if (isFirstImageVisible) { 
            img2.animate().alpha(0f).setDuration(2000); 
            img.animate().alpha(1f).setDuration(2000); 
        } else { 
            img.animate().alpha(0f).setDuration(2000); 
            img2.animate().alpha(1f).setDuration(2000); 
        } 
        // 点击后直接切换状态
        isFirstImageVisible = !isFirstImageVisible; 
    } 
}

这样代码更简洁,也不用再担心整数状态的混乱问题~

内容的提问来源于stack exchange,提问作者vaibnak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:18