当前位置:首页 > 技术心得 > 正文内容

添加 PreferenceFragment到FragmentPagerAdapter

xjtudll9年前 (2017-06-30)技术心得10830

如何添加 PreferenceFragment到FragmentPagerAdapter

首先,android v4 support library不支持这个功能,android v13 support library才支持这个功能。

如何从android v4 support library升级到v13

  • 删除android-support-v4.jar
  • 拷贝android-support-v13.jar到工程目录 
    文件路径: SDK_PATH\extras\android\support\v13; 如果没有的话,需要升级或安装Android Support Library,当然也可以到网上去下载。

在Java文件中:

  • import android.support.v4.app.FragmentPagerAdapterimport 改成 android.support.v13.app.FragmentPagerAdapter
  • 修改FragmentActivity 为普通的 Activity
  • getSupportFragmentManager改成 getFragmentManager
  • Import all necessary classes from android.app instead of android.support.v4
  • (Except: you still need to use the v4 ViewPager, but it's compatible)

一个简单的例子

Activity代码:

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 are now out-of-date; v13, not v4     /**      * The {@link android.support.v4.view.PagerAdapter} that will provide      * fragments for each of the sections. We use a      * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which      * will keep every loaded fragment in memory. If this becomes too memory      * intensive, it may be best to switch to a      * {@link android.support.v4.app.FragmentStatePagerAdapter}.      */     SectionsPagerAdapter mSectionsPagerAdapter;      /**      * The {@link ViewPager} that will host the section contents.      */     ViewPager mViewPager;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          // Create the adapter that will return a fragment for each of the three         // primary sections of the app.         mSectionsPagerAdapter = new SectionsPagerAdapter(                 getFragmentManager()); // instead of getSupportFragmentMangager          // Set up the ViewPager with the sections adapter.         mViewPager = (ViewPager) findViewById(R.id.pager);         mViewPager.setAdapter(mSectionsPagerAdapter);      }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     }      /**      * A {@link FragmentPagerAdapter} that returns a fragment corresponding to      * one of the sections/tabs/pages.      */     public class SectionsPagerAdapter extends FragmentPagerAdapter {          public SectionsPagerAdapter(FragmentManager fm) {             super(fm);         }          @Override         public Fragment getItem(int position) {             // this is just to show it compiles             if (position == 0) {                 // you should really make this a public class elsewhere..                 return new PreferenceFragment() {                     @Override                     public void onCreate(Bundle savedInstanceState) {                         super.onCreate(savedInstanceState);                         addPreferencesFromResource(R.xml.settings_preferences);                     }                 };             }             // getItem is called to instantiate the fragment for the given page.             // Return a DummySectionFragment (defined as a static inner class             // below) with the page number as its 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;         }     }      /**      * A dummy fragment representing a section of the app, but that simply      * displays dummy text.      */     public static class DummySectionFragment extends Fragment {         /**          * The fragment argument representing the section number for this          * 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

参考资料:

http://stackoverflow.com/questions/15845632/adding-preferencefragment-to-fragmentpageradapter



扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/460/

标签: Android
分享给朋友:

“添加 PreferenceFragment到FragmentPagerAdapter” 的相关文章

数码管应用笔记

数码管应用笔记

数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。 为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。 共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图。 一般来...

Altium检查遗漏的封装

Altium检查遗漏的封装

画完原理图后,当然就要检查封装是否填写以及填写是否正确。虽然用Compile能够找到封装的问题,但是Compile之后的message不仅仅包含封装的错误,还包括其他,看起来不甚直观,操作也不是很方便。以前在用Protel99SE的时候,可以通过导出电子表格的方式来检查封装是否正确。高版本的Alti...

C# XmlSerializer无法创建文件或目录

C# XmlSerializer无法创建文件或目录

现象: 在某一台XP机器上,时而正常,时而弹出无法创建文件或目录 错误具体信息: 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path...

C51: LOCATING INITIALIZED VARIABLES AT ABSOLUTE ADDRESSES 如何初始化绝对定址的变量

C51: LOCATING INITIALIZED VARIABLES AT ABSOLUTE ADDRESSES 如何初始化绝对定址的变量

http://www.keil.com/support/docs/301.htm QUESTION 问题描述 I want to locate some initialized constants and variables in memory, but I can't initiali...

NSWindow——设定窗口位置

NSWindow——设定窗口位置

 1、记忆窗口的位置 何为记忆窗口位置 ,即下次打开窗口的位置跟上次退出时一样。 如果是用代码,请参考: 记忆窗口位置    http://cocoa.venj.me/blog/remember-window-position/ 在xib文件中设定,见图...

IAR STM8嵌入汇编

IAR STM8嵌入汇编

IAR嵌入汇编:使用asm或者__asm,推荐使用__asm。 void delay_n_nop(uint8 N) { // 用C语言的话 会跟编译器的优化有关 /*     uint8 i;     for (i=N; i>0; i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。