访问 Fragment 中的资产

Access assets in Fragment

我的资产文件夹中有一个字体,我在我的片段中这样称呼它:

Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/myFont.otf");

但是我收到一个 lint 警告说 getAssets() 可能 return 为空。

我做了一些研究,发现 this question/answer。我目前已经获得了活动上下文。


我想做的是在我的 Activity 中添加以下方法:

public static Typeface getMyFont(Activity context){
    return Typeface.createFromAsset(context.getAssets(),  "fonts/myFont.otf");
}

然后像这样从我的片段中调用它:

mTextView.setTypeface(Activity.getMyFont(getActivity()));

通过执行上述操作,我没有收到任何警告,但我不确定这是否是正确的方法,所以..

我的问题是:
我应该忽略棉绒警告吗?我应该像上面那样做还是有正确的方法?

But I got a lint warning saying that getAssets() may return null.

in Fragments getActivity() 可以 return null 如果片段当前没有附加到父 activity,

解决方案 1: 检查您的 activity 是否不为 null

 if(getActivity()!=null){
            Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/myFont.otf");
 }

解决方案 2: 您可以使用 onAttach() 获取上下文

public class BlankFragment extends Fragment {


    private Context mContext;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        mContext=context;
    }

    public BlankFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        Typeface custom_font = Typeface.createFromAsset(mContext.getAssets(), "fonts/myFont.otf");

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }

}

我认为你应该使用下面的代码:

Typeface myFont = Typeface.createFromAsset(getActivity().getAssets(), "myFont.ttf");
mTextView.setTypeface(myFont)

它运行成功。