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

Xamarin Android中Fragment调用Assets报错:当前上下文不存在‘assets’

解决Fragment中访问Assets报错的问题

这个问题我之前碰到过好多次,核心原因很简单:Fragment本身并没有直接提供Assets属性,你直接写Assets自然会提示“当前上下文不存在该名称”。得通过Fragment关联的Activity来访问Assets资源才行。

修复步骤

1. 替换Assets的引用方式

把你原来代码里的Assets改成Activity.Assets,因为Fragment的Activity属性会返回它所依附的Activity实例,而Activity是自带Assets属性的。

2. 选对生命周期方法执行代码

建议把设置字体的代码放在Fragment的OnViewCreated或者OnActivityCreated方法里,这两个阶段Fragment已经和Activity完成绑定,Activity属性不会为空。

修复后的完整示例代码:

public class xFragment : Fragment 
{
    const string ARG_PAGE = "ARG_PAGE";
    private int mPage;

    public static xFragment newInstance(int page) 
    {
        var fragment = new xFragment();
        var args = new Bundle();
        args.PutInt(ARG_PAGE, page);
        fragment.Arguments = args;
        return fragment;
    }

    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        mPage = Arguments.GetInt(ARG_PAGE);
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return inflater.Inflate(Resource.Layout.your_fragment_layout, container, false);
    }

    public override void OnViewCreated(View view, Bundle savedInstanceState)
    {
        base.OnViewCreated(view, savedInstanceState);
        
        // 设置字体的核心代码
        var tv1 = view.FindViewById<TextView>(Resource.Id.tv1);
        if (tv1 != null && Activity != null)
        {
            tv1.Typeface = Typeface.CreateFromAsset(Activity.Assets, "fonts/Montserrat_Light.ttf");
        }
    }
}

额外注意事项

  • 确保字体文件路径正确:fonts/Montserrat_Light.ttf意味着Assets目录下有个fonts文件夹,里面放着这个ttf文件,并且文件的Build Action要设置为AndroidAsset(右键文件→属性里可以修改)。
  • 一定要加Activity != null的判断,避免Fragment在未绑定Activity时调用导致空引用异常。
  • 别在Fragment的构造函数或者OnCreate方法里直接用Activity,这时候Activity可能还没完成绑定,容易出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:45:38