私のアプリケーションには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)
}
}
}
setUserVisibleHint
をfragment
に入れてみませんか?
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
if (NetworkUtils.isConnected(getActivity())) {
callYourApi();
}
}
}
このタイプの実装には、BottomSheetBehavior https://developer.Android.com/reference/Android/support/design/widget/BottomSheetBehavior を使用します。 BottomSheetDialogFragmentも使用できます。
特定の動作を設定するには、このコードを使用します。
bottomSheetBehavior.setPeekHeight(300);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
Navigation を使用している場合、これは希望する動作を実現するための最良の方法ではない可能性があります。ナビゲーションには OnDestinationChangedListenerNavController.getCurrentDestination が呼び出されるたびにコールバックを受け取るインターフェイスがあります。
幸いにも、Kotlinを使用しており、HomeActivityで次のようなものを回避できる場合があります。
navController.addOnDestinationChangedListener { _, destination, _ ->
Handler().postDelayed({ requireContext().toast("Show") }, 500)
}
そして、あなたは望ましい結果を得るべきです。
ナビゲーションが初めての場合は、 this codelabをお勧めします。それはいくつかの基本を通り、あなたが始めるのを助けることができます。より高度な概念のいくつかについては、Githubで NavigationAdvancedSample をチェックアウトできます。
とにかくフラグメントを直接使用する場合は、おそらくsetUserVisibleHint()よりもライフサイクルメソッド(onStart)を使用する方が信頼性が高くなります。