0

プログラムで 3 つの Java ファイルを作成しました。それらは、MainActivity.java、TrackerDBAdaptor.java、および MyListFragment.java です。私が持っているデータベースにアクセスするには

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

上記の行を MainActivity.java に入れると、問題ありません。しかし、私の意図は、MyListFragment.java クラスからデータベースにアクセスしたいということです。そこで、これら 2 行を MyListFragment.java の onCreateView() 内に配置しました。次に、「これ」の中に dbHelper = new TrackerDBAdapter(this); は問題があります。私が理解したのは、これは呼び出しているクラスのインスタンスを意味し、MainActivity.java と MyListFragment.java に違いがある理由です。ありがとう。

4

2 に答える 2

3

あなたのクラス MainActivity.java は、おそらく Context の子孫であるクラス Activity を拡張します。TrackerDBAdapter.java はおそらくコンストラクターで Context を取ります。これが MainActivity で「this」を渡す理由です。MyListFragment は、おそらく Context の子孫ではない Fragment を拡張しているため、「this」を渡すことはできません。フラグメント内の Context オブジェクトを取得する 1 つの方法は、getActivity() を呼び出すことです。これは、フラグメントがアタッチされている Activity オブジェクトを返します。つまり、MyListFragment で次のようにすると、おそらくうまくいくでしょう。

dbHelper = new TrackerDBAdapter(getActivity())

ただし、注意してください。フラグメントがアクティビティに関連付けられていない場合、getActivity() は null を返すことがあります。

于 2013-03-20T15:41:35.343 に答える
0

Fragment内ではonCreateView()、次のように呼び出す必要があります。

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

乾杯、ハッピーコーディング。

于 2013-03-20T15:38:54.777 に答える