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
相关产品推荐
相关产品推荐

