2012-03-06 36 views
12

最近私のアプリケーションにFragmentを追加しました。新しいアプリケーションの場合、私のフラグメントが表示されるとすぐに を通知する必要があります。だから私は フラグメントが再び表示されるとすぐにいくつかの計算を行うことができます。フラグメントonHiddenChangedが呼び出されていません

マイフラグメントはTabIndicatorと一緒に使用され、唯一のFragmentClassで、使用回数は です。ここで

は、通常の標準オーバーライドクラスです:

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 
} 

答えて

6

はまだ答えを探していますか? onHiddenChangedは、フラグメントが初めて表示されたときに呼び出されることはありません。状態が変更されたときのみ。断片の隠れ状態(isHidden(によって返される))変更されたときに呼び出さ

:ドキュメントから

。断片は隠されずに始まります。これは、フラグメントが状態をその状態から変更するたびに呼び出されます。

+0

回答ありがとうございますが、このメソッドはこれまでに呼び出されませんでした。だから私はそれが私のビューページにリスナーがあるという事実のために解決しました。このリスナーでは、私はonHidden-Changedメソッドを呼び出します。愚かなしかしええ、それは今動作します。 – mikepenz

+0

これは決して呼び出されていません。 –

9

私は同じ問題を抱えていました。

Iフラグメント(Building a Flexible UI)とスタンダートガイドラインpractic作業を用います。 2つのフラグメント(ListItemsFragmentとInfoItemFragment)があります。 通常の画面サイズで使用すると、私はInfoItemFragmentのListItemsFragmentに置き換えられ、 のメソッドはonHiddenChangedが自動的に呼び出されません。

FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem"); 
mFragmentTransaction.addToBackStack(null); 
mFragmentTransaction.commit(); 

私はhideメソッドFragmentTransactionを呼び出す必要があると思います。例:

ListItemsFragment mListItemsFragment; 
    FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
    mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem"); 
    if (mListItemsFragment != null) { 
     mFragmentTransaction.hide(mListItemsFragment); 
    } 
    mFragmentTransaction.addToBackStack(null); 
    mFragmentTransaction.commit(); 

これで、onHiddenChangedメソッドは正常に動作しました。ユーザーが「戻る」ボタンをクリックすると、mListItemsFragmentが再度表示され、onHiddenChangedメソッドが自動と呼ばれます。ドキュメントで

は言った:フラグメントがその

から状態を変更するたびに これは私たちが手動で変更値は、メソッドが呼び出されますしなければならないと思うと呼ばれます。

0

同様の問題を解決するには、setUserVisibleHintメソッドを使用できます。それがあなたを助けることを願っています。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Do some your work 
    } else { 
     // Do your Work 
    } 
} 
関連する問題