0

我在我的程序中制作了三个 Java 文件。它们是 MainActivity.java、TrackerDBAdaptor.java 和 MyListFragment.java。要访问我拥有的数据库

private TrackerDBAdapter dbHelper;      
dbHelper = new TrackerDBAdapter(this);

当我把上面几行放在 MainActivity.java 中时,没有问题。但我的意图是我想从 MyListFragment.java 类访问数据库。所以我把这两行放在 MyListFragment.java 的 onCreateView() 中。然后里面的“this” dbHelper = new TrackerDBAdapter(this); 有问题。我的理解是这意味着调用类的实例,为什么 MainActivity.java 和 MyListFragment.java 之间存在差异。谢谢。

4

2 回答 2

3

您的 MainActivity.java 类可能扩展了 Activity 类,后者又是 Context 的后代。TrackerDBAdapter.java 可能在构造函数中使用 Context,这就是在 MainActivity 中传递“this”的原因。MyListFragment 可能扩展了 Fragment,它不是 Context 的后代,因此传递“this”将不起作用。在片段中获取 Context 对象的一种方法是调用 getActivity(),它返回片段所附加到的 Activity 对象。换句话说,在 MyListFragment 中执行以下操作可能会起作用。

dbHelper = new TrackerDBAdapter(getActivity())

不过要小心。如果片段未附加到活动,getActivity() 可能会返回 null。

于 2013-03-20T15:41:35.343 回答
0

onCreateView()Fragment 内部,您需要调用如下:

private TrackerDBAdapter dbHelper;      
dbHelper = new TrackerDBAdapter(getActivity().getApplicationContext());

干杯,快乐编码。

于 2013-03-20T15:38:54.777 回答