android fragment setuservisiblehint,in androidx.fragment.app.Fragment,setUserVisibleHint()is Depreca...

问题

@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

if (getUserVisibleHint()) {

isVisible = true;

onVisible();

} else {

isVisible = false;

onInVisible();

}

}

I found that this part of the code is not executed.

回答1:

Now in AndroidX method setUserVisibleHint(boolean isVisibleToUser) is deprecated and if you take a look into documentation, it says:

You can now set a max Lifecycle state for a Fragment by calling

setMaxLifecycle() on a FragmentTransaction. This replaces the now

deprecated setUserVisibleHint(). FragmentPagerAdapter and

FragmentStatePagerAdapter have a new constructor that allows you to

switch to the new behavior.

So basically when you use this approach in FragmentTransaction:

.getSupportFragmentManager()

.beginTransaction()

.setMaxLifecycle(fragment, Lifecycle.State.STARTED);

would be equivalent to setUserVisibleHint(false) and:

.getSupportFragmentManager()

.beginTransaction()

.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);

would be equivalent to: setUserVisibleHint(true)

回答2:

They just changed API in Fragments.

If you use this method to limit fragments lifecycle:

You can now set a max Lifecycle state for a Fragment by calling

setMaxLifecycle() on a FragmentTransaction. This replaces the now

deprecated setUserVisibleHint().

Source: https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0-alpha07 .

If you need this method because you try to detect which fragment is currently visible in ViewPager. You can now just use onResume and onPause methods instead but before that you should change default behaviour in FragmentPagerAdapter constructor.

Like this:

FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

来源:https://stackoverflow.com/questions/57885849/in-androidx-fragment-app-fragment-setuservisiblehint-is-deprecated-and-not-exec

你可能感兴趣的:(android,fragment)