android - Adding PreferenceFragment to FragmentPagerAdapter -


i trying add preferencefragment fragmentpageradapter.

my class extends fragmentactivity, have tried fragmenttransaction, shown below trying add container , can't seem work. no errors thrown, in fact nothing happens.

main activity:

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      msectionspageradapter = new sectionspageradapter(getsupportfragmentmanager());     mviewpager = (viewpager) findviewbyid(r.id.pager);     mviewpager.setadapter(msectionspageradapter); } 

activity_main.xml:

<android.support.v4.view.viewpager      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/pager"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".mainactivity" > </android.support.v4.view.viewpager> 

my options menu selection:

android.app.fragmentmanager fm; @override public boolean onoptionsitemselected(menuitem item) {     switch (item.getitemid()) {     case r.id.menu_settings:         jjsettings settings = new jjsettings();         fm = getfragmentmanager();         fragmenttransaction fragtrans = fm.begintransaction();         // tried `replace()` here well. same 'nothing happens' result.         fragtrans.add(settings, "settings");         fragtrans.commit();         return true;     case r.id.menu_help:         menuhelp();         return true;     default:         return super.onoptionsitemselected(item);     } } 

my settings fragment:

public class jjsettings extends preferencefragment {      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         addpreferencesfromresource(r.xml.settings);     } } 

my preference stick fragments if possible, meaning i'd rather not extend preferenceactivity or take user activity calls preferencefragment, if @ possible. i'm hoping missed in research.


edit

public class sectionspageradapter extends fragmentpageradapter {     private int _count = 2;      public sectionspageradapter(fragmentmanager fm) { super(fm); }      @override     public object instantiateitem(viewgroup container, int position) {         return super.instantiateitem(container, position);     }      @override     public fragment getitem(int position) {         switch (position) {         case 0:             return new jjmainfragment();         case 1:             return new jjpendingfragment();         default:             return null;         }     }      public void setcount(int count) { this._count = count; }      @override     public int getcount() { return this._count; }      @override     public charsequence getpagetitle(int position) {         switch (position) {         case 0:             return getstring(r.string.c_list).touppercase(locale.english);         case 1:             return getstring(r.string.c_pending).touppercase(locale.english);         }         return null;     } } 

this answer led me solution of using v13 support library, includes fragmentpageradapter uses bona-fide android.app.fragments can support preferencefragment.

assuming use eclipse , run new app wizard "scrollable tabs + swipe" navigation (which gives v4 pager boilerplate), here modifications need make upgrade v13:

  • delete "android-support-v4.jar" file libs folder
  • copy "android-support-v13.jar" sdk_path\extras\android\support\v13; if it's not there, use sdk manager install or update "extras/android support library"

then, in java file:

  • change fragmentpageradapter import v4 v13
  • change fragmentactivity plain activity
  • change calls getsupportfragmentmanager getfragmentmanager
  • import necessary classes android.app instead of android.support.v4
  • (except: still need use v4 viewpager, it's compatible)

i've copied modified source below, verified on latest jellybean.

mainactivity.java:

package com.example.pagerwithpreferencesfragment;  import java.util.locale;  import android.app.activity; import android.app.fragment; import android.app.fragmentmanager; import android.os.bundle; import android.preference.preferencefragment; import android.support.v13.app.fragmentpageradapter; // instead of v4.app... import android.support.v4.view.viewpager; import android.view.gravity; import android.view.layoutinflater; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.widget.textview;  public class mainactivity extends activity { // no longer fragmentactivity      // these comments out-of-date; v13, not v4     /**      * {@link android.support.v4.view.pageradapter} provide      * fragments each of sections. use      * {@link android.support.v4.app.fragmentpageradapter} derivative,      * keep every loaded fragment in memory. if becomes memory      * intensive, may best switch      * {@link android.support.v4.app.fragmentstatepageradapter}.      */     sectionspageradapter msectionspageradapter;      /**      * {@link viewpager} host section contents.      */     viewpager mviewpager;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          // create adapter return fragment each of 3         // primary sections of app.         msectionspageradapter = new sectionspageradapter(                 getfragmentmanager()); // instead of getsupportfragmentmangager          // set viewpager sections adapter.         mviewpager = (viewpager) findviewbyid(r.id.pager);         mviewpager.setadapter(msectionspageradapter);      }      @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.main, menu);         return true;     }      /**      * {@link fragmentpageradapter} returns fragment corresponding      * 1 of sections/tabs/pages.      */     public class sectionspageradapter extends fragmentpageradapter {          public sectionspageradapter(fragmentmanager fm) {             super(fm);         }          @override         public fragment getitem(int position) {             // show compiles             if (position == 0) {                 // should make public class elsewhere..                 return new preferencefragment() {                     @override                     public void oncreate(bundle savedinstancestate) {                         super.oncreate(savedinstancestate);                         addpreferencesfromresource(r.xml.settings_preferences);                     }                 };             }             // getitem called instantiate fragment given page.             // return dummysectionfragment (defined static inner class             // below) page number lone argument.             fragment fragment = new dummysectionfragment();             bundle args = new bundle();             args.putint(dummysectionfragment.arg_section_number, position + 1);             fragment.setarguments(args);             return fragment;         }          @override         public int getcount() {             // show 3 total pages.             return 3;         }          @override         public charsequence getpagetitle(int position) {             locale l = locale.getdefault();             switch (position) {             case 0:                 return getstring(r.string.title_section1).touppercase(l);             case 1:                 return getstring(r.string.title_section2).touppercase(l);             case 2:                 return getstring(r.string.title_section3).touppercase(l);             }             return null;         }     }      /**      * dummy fragment representing section of app,      * displays dummy text.      */     public static class dummysectionfragment extends fragment {         /**          * fragment argument representing section number          * fragment.          */         public static final string arg_section_number = "section_number";          public dummysectionfragment() {         }          @override         public view oncreateview(layoutinflater inflater, viewgroup container,                 bundle savedinstancestate) {             view rootview = inflater.inflate(r.layout.fragment_main_dummy,                     container, false);             textview dummytextview = (textview) rootview                     .findviewbyid(r.id.section_label);             dummytextview.settext(integer.tostring(getarguments().getint(                     arg_section_number)));             return rootview;         }     }  } 

settings_preferences.xml:

<?xml version="1.0" encoding="utf-8"?>  <preferencescreen    xmlns:android="http://schemas.android.com/apk/res/android">     <preferencecategory       android:key="my_category_key"       android:title="my title">         <checkboxpreference          android:key="pref_key"          android:title="title"          android:summary="summary"          android:defaultvalue="false"          />     </preferencecategory>  </preferencescreen> 

enter image description here


Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -