基本上我开始将一个纯粹的活动应用程序移植到片段,我几乎被困在第一步。
在我当前的应用程序中,我扩展了应用程序以访问用于自定义应用程序的全局常量和变量。
public class MyApplication extends Application {
private final int nbreLivres = 50;
private final String[] nomsLivres = new String[nbreLivres];
private final int colorCount = 25;
private final int[] customColors = new int[colorCount];
private SparseIntArray hmColors = new SparseIntArray();
private int mCustomFontSize = 14;
private static MyApplication instance;
...
...
public int getColorCount() {
return colorCount;
}
public int getColorFromIndex(int index) {
return customColors[index];
}
...
...
...
}
从活动中访问这个我做类似的事情
((MyApplication) this.getApplication()).getColorCount();
如果我需要使用实例访问它,我会这样做
private MyApplication mApp = MyApplication.getMyApplication();
mApp.getColorCount();
问题 :
在片段中执行这些操作时,例如设置列表 (ListFragment) 的值以列出我的应用程序中可用的所有颜色
((MyApplication) getActivity().getApplication()).getColorsList();
我也试过了
MyApplication.getMyApplication().getColorsList();
两者都只是在该行以“空指针”异常崩溃。
我有什么不明白或我做错了什么?
编辑
抱歉,我忘记提及它是基于 Eclipse 中给出的主/详细示例,我尝试用我自己的数据填充主列表。
在这里(我没有复制/粘贴所有无用的东西)。
public class LivreListFragment extends ListFragment {
...
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1, ((MyApplication) getActivity().getApplication()).getColorsList() ));
}
}
回答
最后我发现我忘记在清单文件中定义我的应用程序名称了!
现在我的代码按原样工作。
但是根据@CharlieCollins 的回答,我必须将它放在 onActivityCreated 中,而不是放在 onCreate 中(不安全)。
感谢您的帮助,了解 onActivityCreated 的重要性。