web-dev-qa-db-ja.com

AndroidのフラグメントでsetUserVisibleHintを使用する方法

私のアプリケーションにはBottomNavBarがあり、このfragmentsのアイテムをクリックしたときにBottomNavBarを表示したいです。
このfragmentsを設定するには、BottomNavBarを使用します NavigationGraph コンポーネントを使用します!

このsetUserVisibleHintの1つにfragmentメソッドを使用したいのですが、このfragmentを表示するときは、setUserVisibleHint

マイアクティビティコードセットfragmentsからBottomNavBarアイテム:

class HomeActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupNavigation()

    }

        private fun setupNavigation() {
        val navController = Navigation.findNavController(this, R.id.homePage_fragmentNavHost)
        NavigationUI.setupWithNavController(homePage_bottomNavBar, navController)
    }

    override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.homePage_fragmentNavHost).navigateUp()
}

私のフラグメントコード:

class HomeDashboardFragment : Fragment(){

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home_dashboard, container, false)
    }

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        if (isVisibleToUser) {
            Handler().postDelayed({ requireContext().toast("Show") }, 500)
        }
    }
}

setUserVisibleHintfragmentに入れてみませんか?

6
KokoBand
 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser){
        if (NetworkUtils.isConnected(getActivity())) {
            callYourApi();
        } 
    }
}
0
Samset

このタイプの実装には、BottomSheetBehavior https://developer.Android.com/reference/Android/support/design/widget/BottomSheetBehavior を使用します。 BottomSheetDialogFragmentも使用できます。

特定の動作を設定するには、このコードを使用します。

bottomSheetBehavior.setPeekHeight(300);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
0
Vishal Pawar

Navigation を使用している場合、これは希望する動作を実現するための最良の方法ではない可能性があります。ナビゲーションには OnDestinationChangedListenerNavController.getCurrentDestination が呼び出されるたびにコールバックを受け取るインターフェイスがあります。

幸いにも、Kotlinを使用しており、HomeActivityで次のようなものを回避できる場合があります。

navController.addOnDestinationChangedListener { _, destination, _ ->
    Handler().postDelayed({ requireContext().toast("Show") }, 500)
}

そして、あなたは望ましい結果を得るべきです。

ナビゲーションが初めての場合は、 this codelabをお勧めします。それはいくつかの基本を通り、あなたが始めるのを助けることができます。より高度な概念のいくつかについては、Githubで NavigationAdvancedSample をチェックアウトできます。

とにかくフラグメントを直接使用する場合は、おそらくsetUserVisibleHint()よりもライフサイクルメソッド(onStart)を使用する方が信頼性が高くなります。

0
jeremybwoods