java活动实例不存在空对象引用
我正在尝试开发一个Android应用程序。对于我的用例,我想使用一种自定义字体,我编写了一个收集视图中所有可用TextViews
的脚本,以便通过循环轻松设置字体。我想我应该把文本操作的东西源代码输出到一个名为TextManager.class
的类中。但现在,当我执行应用程序时,我得到了一个错误:
java.lang.NullPointerException: Attempt to invoke virtual method '安卓.content.res.Resources 安卓.content.Context.getResources()' on a null object reference
它发生在我试图在TextMangaer中设置字体时。班我做了一些研究,发现这是因为此时不存在活动实例。但我不明白为什么,因为当我开始尝试这样做的时候。课堂上没有问题
//Start.class
public class Start extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // set fullscreen
//Initialize shared preferences
prefs = getSharedPreferences("User", Context.MODE_PRIVATE);
editor=prefs.edit();
setContentView(R.layout.start_screen);
TextManager textManager= new TextManager();
textManager.setTypeface(getTextViews((ViewGroup) findViewById(R.id.root_menu)));
}
}
还有我的文本管理器。类别:
public class TextManager extends Start{
public TextManager(){
super();
}
public void setTypeface(List<Integer> idsOfTextViews){
Typeface typeFaceIkarosLight= Typeface.createFromAsset(getAssets(), "font/ikaros_light.otf");
for(int i=0; i < idsOfTextViews.size();i++){
((TextView)findViewById(idsOfTextViews.get(i))).setTypeface(typeFaceIkarosLight);
}
}
}
那么我该如何解决这个问题,或者我该如何写这个?如果有人能帮我弄清楚那就太好了。提前谢谢
# 1 楼答案
如果你想使用自定义字体,你可以举这个例子
本教程将向您展示如何在
TextView
、EditText
和Button
上设置自定义字体http://androiderstack.com/index.php/2017/08/14/use-custom-font-in-textview-edittext-and-button-in-android/
这肯定会对你有帮助
# 2 楼答案
最好使用返回字体的方法,而不是将textview ID作为参数传递。你可以这样做:
# 3 楼答案
问题是获取资产的上下文为空
如果在活动中使用
getContext()
或getApplicationContext()
,但如果在片段中使用,则使用getActivity().getContext()
而不是