8

私は遭遇した奇妙な問題があります:getActivity()メソッド常にはフラグメント内でnullを返します。私はonAttach()とonCreateView()の実行が終了した後にそれを呼び出します。Android getActivity()は常にフラグメント内でnullを返します

FragmentActivity内部この断片寿命()断片のスタックを含み、私はそれに断片を追加する方法である:

(このコードフラグメント活性ののonCreate()(から呼び出されています))

SmartFragment fragment; 
fragment = (SmartFragment) Fragment.instantiate(this, 
fragmentClassName, params);  
mStackOfFragments.add(fragment); 
FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
trans.add(R.id.tabcontent, fragment); 
trans.addToBackStack(null); 
trans.commitAllowingStateLoss(); 

は、私はそれを明確に十分であると思います

編集1:

getActivity()への呼び出し:

protected OnDoneListener nDoneListener = new OnDoneListener() { 

    @Override 
    public void OnDone(final int counter, final String name) { 


     if (getActivity() != null) 
      ((TabActivity) getActivity()).RunOnUiThread(new Runnable() { 

... ...

このコールバックは、別のクラスから呼び出されています。

編集2:

class MemoryManager() 
{ 

    private OnDoneListener nDoneListener; 

    public void setOnDoneListener(OnDoneListener onDoneListener) 
    { 
    this.onDoneListner = onDoneListener; 
    } 

    public void updateUiOnRequestFinish() 
    { 
     onDoneListener.onDone(); 
    } 

} 

MemoryManaget自体がupdateUiOnRequestFinish(の呼び出し)は、異なるコールバックから

編集3:

FragmentManagerログがある:

04-08 18:44:05.950: V/FragmentManager(16280): Commit: BackStackEntry{41f9bd60} 
`04-08 18:44:05.950: D/FragmentManager(16280): mName=null mIndex=-1 mCommitted=false 
04-08 18:44:05.950: D/FragmentManager(16280): Operations: 
04-08 18:44:05.950: D/FragmentManager(16280):  Op #0: ADD FragmentMyProfile{41f9bc20 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): Setting back stack index 0 to BackStackEntry{41f9bd60} 
04-08 18:44:05.950: V/FragmentManager(16280): Run: BackStackEntry{41f9bd60 #0} 
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting in BackStackEntry{41f9bd60 #0} by 1 
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting of FragmentMyProfile{41f9bc20 id=0x7f070126} to 1 
04-08 18:44:05.950: V/FragmentManager(16280): add: FragmentMyProfile{41f9bc20 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): Allocated fragment index FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): moveto CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): moveto ACTIVITY_CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.990: V/FragmentManager(16280): moveto STARTED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:06.030: V/FragmentManager(16280): moveto RESUMED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
` 

そしてそれは私にはうまく見えます。だから、私はこのバグが私がコールバックからgetActivity()を呼び出す方法に関係していると推測しています。あなたは「android.support.v4.appを使用している場合は

+1

フラグメントライフサイクルに慣れていないと奇妙なことです... http://developer.android.com/guide/components/fragments.html#CoordinatingWithActivity ...この段落の前の数行をチェックしてください... Activity ConstructorでActivityにFragmentを追加しましたか? – Selvin

+0

getActivity()行でコードを記述できますか? –

+0

セルヴィン:あなたのコメントから、これは些細な問題であることを示唆しています。まあ、あなたが正しいと思っていますが、おそらくそうではありません。私はこのリンクとその内容を知っていて、まだこの問題を抱えています – Nativ

答えて

7

この問題は、 "android.app.Fragment" または "android.support.v4.app.Fragment"

の使用getActivity()のためにすることができます。 「フラグメント」では、「android.app.Fragment」からgetActivityを使用していないかどうかを確認する必要があります。

+0

これは私の問題を解決しました。私はHolo Everywhereを使用しているので、getActivity()の代わりにgetSupportActivity()を使用します。まだフラグメントが最初にロードされたときにgetActivity()が動作していた理由は分かっていませんでしたが、離れたところをナビゲートしてから戻ってくるときには... – speedynomads

+0

あなたは正しい人でした!どうもありがとう – Nativ

関連する問題