web-dev-qa-db-ja.com

Android setUserVisibleHintは呼び出されませんか?

フラグメントがいつ表示されるかを知る必要があります。setMenuVisibilityを使用していましたが、これは適切なオプションではないことがわかりました。 FragmentStatePagerAdapter FragmentにsetUserVisibleHintを実装しようとしていますが、呼び出されません。

import Android.app.Fragment;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.Toast;


public class Contacts extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            View view = inflater.inflate(R.layout.fragment_screen_contacts, container, false);
            return view;
        }


    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.d("MyFragment", "This never shows up.");
        Toast.makeText(getActivity(), "Neither does this", Toast.LENGTH_LONG).show();
    }
}

APIレベル19を実行しており、AndroidManifestで最小APIレベル15を設定しています。 setUserVisibleHintを取得するために他に何かすることはありますか、何が間違っていますか?

16
lisovaccaro

setUserVisibleHintを使用すると、フラグメントを具体的に非表示にする派手なフラグメントトランザクションを実行しているときに、フラグメントが実際には表示されていないことをシステムに通知できます。これを使用して可視性を判断することはできず、デフォルトでtrueになります。

IsVisible呼び出しを使用して、フラグメントが表示されているかどうかを確認し、フラグメントまたはルートビュークラスのonAttachを使用して、アクティビティまたはそれぞれのルートビューにアタッチされたときにコールバックを取得する必要があります。

19
setUserVisibleHint() 

FragmentPagerAdapterでのみ機能します。 Fragment.setUserVisibleHint()はAndroidシステム? によって呼び出されますか?」を参照してください。

17
BruceDu