isValidFragment Android API 19

前端 未结 9 1960
你的背包
你的背包 2020-12-01 03:00

When I try my app with Android KitKat I have an error in PreferenceActivity.

Subclasses of PreferenceActivity must override isValidFragment(String) to ve

9条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-01 03:10

    this is my solution:

    • if u need dynamic rebuild headers
    • if u use extras to start preference activity - onBuildHeaders() approach will fail! (with below start intent extras - why ??? - simple because onBuildHeaders() is never called):

      Intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMEN,Fragment.class.getName()); Intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true);

    This is example class:

    /**
     * Preference Header for showing settings and add view as two panels for tablets
     * for ActionBar we need override onCreate and setContentView
     */
    public class SettingsPreferenceActivity extends PreferenceActivity {
    
        /** valid fragment list declaration */
        private List validFragmentList;
    
        /** some example irrelevant class for holding user session  */
        SessionManager _sessionManager;
    
        @Override
        public void onBuildHeaders(List
    target) { /** load header from res */ loadHeadersFromResource(getValidResId(), target); } /** * this API method was added due to a newly discovered vulnerability. */ @Override protected boolean isValidFragment(String fragmentName) { List
    headers = new ArrayList<>(); /** fill fragments list */ tryObtainValidFragmentList(getValidResId(), headers); /** check id valid */ return validFragmentList.contains(fragmentName); } /** try fill list of valid fragments */ private void tryObtainValidFragmentList(int resourceId, List
    target) { /** check for null */ if(validFragmentList==null) { /** init */ validFragmentList = new ArrayList(); } else { /** clear */ validFragmentList.clear(); } /** load headers to list */ loadHeadersFromResource(resourceId, target); /** set headers class names to list */ for (Header header : target) { /** fill */ validFragmentList.add(header.fragment); } } /** obtain valid res id to build headers */ private int getValidResId() { /** get session manager */ _sessionManager = SessionManager.getInstance(); /** check if user is authorized */ if (_sessionManager.getCurrentUser().getWebPart().isAuthorized()) { /** if is return full preferences header */ return R.xml.settings_preferences_header_logged_in; } else { /** else return short header */ return R.xml.settings_preferences_header_logged_out; } } }

提交回复
热议问题