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

Android/Xamarin.Android中如何在Canvas里使用Intent的GetIntExtra

解决Intent传值到带Canvas的Activity失效问题

核心问题分析

你遇到的问题大概率是在自定义Canvas View中直接尝试获取Intent值,但View本身不持有Intent引用,必须先在宿主Activity中获取值,再传递给View。

正确实现步骤

1. 启动带Canvas的Activity时正常传值

// 从其他Activity启动CanvasActivity
Intent intent = new Intent(this, typeof(CanvasActivity));
intent.PutExtra("score", 2); // 确保key一致
StartActivity(intent);

2. 在CanvasActivity中先获取Intent值,再传递给自定义View

public class CanvasActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        
        // 1. 先从Intent中取出值
        int score = Intent.GetIntExtra("score", 0);
        
        // 2. 初始化自定义Canvas View,将score传入
        MyCanvasView canvasView = new MyCanvasView(this, score);
        SetContentView(canvasView);
    }
}

3. 自定义Canvas View接收并使用传递的变量

public class MyCanvasView : View
{
    private int _score;

    // 通过构造函数接收从Activity传递来的score
    public MyCanvasView(Context context, int score) : base(context)
    {
        _score = score;
    }

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);
        
        // 在Canvas中使用_score变量,比如绘制分数文本
        Paint textPaint = new Paint();
        textPaint.Color = Color.Black;
        textPaint.TextSize = 60;
        canvas.DrawText($"当前分数: {_score}", 150, 200, textPaint);
    }
}

常见错误排查

  • Key不匹配:PutExtra和GetIntExtra的key必须完全一致(大小写敏感),比如不要一边用"Score"一边用"score"。
  • 获取时机错误:不要在自定义View的构造中直接尝试获取Activity的Intent,View本身没有Intent属性,必须由Activity传递值。
  • 默认值干扰:如果GetIntExtra返回默认值0,检查是否启动Activity时没有正确PutExtra,或者key写错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:04:58