How to manage dividers in a PreferenceFragment?

后端 未结 10 1019
慢半拍i
慢半拍i 2020-12-01 12:29

I started dealing with preferences in a PreferenceFragment. Here\'s what I have:

\"my_preferences\"

10条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-01 13:06

    New solution for new android API 24 and above (December 25th, 2017).

    I've found after try many ways on stackoverflow, but not work, or it just work but not work in nestest PreferenceScreen.

    Frist, you need to find listview from current displaying fragment, and remove the divider:

    private fun removeDividerInCurrentFragment() {
        this@YourPreferenceActivity.fragmentManager.findFragmentById(android.R.id.content)?.let {
            it.view?.findViewById(android.R.id.list)?.let {
                it.divider = null
                it.dividerHeight = 0
            }
        }
    }
    

    Second, to remove the divider when fragment commited, call method above (removeDividerInCurrentFragment) to remove listview's divider.

    To sure if you have nestest PreferenceScreen. Register listener when fragment changed in your PreferenceActivity by implement FragmentManager.OnBackStackChangedListener protocol:

    class YourPreferenceActivity : PreferenceActivity(), FragmentManager.OnBackStackChangedListener {
        override fun onBackStackChanged() {
            this@YourPreferenceActivity.removeDividerInCurrentFragment()
        }
    }
    

    Finally, register backstack changes listener by call fragmentManager.addOnBackStackChangedListener(this@ YourPreferenceActivity) in onCreate. And remove backstack changes listener by call fragmentManager.removeOnBackStackChangedListener in onDestroyed method.

    Good luck!

提交回复
热议问题