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

添加 PreferenceFragment到FragmentPagerAdapter

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

如何添加 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://www.xjtudll.cn/Exp/460/

标签: Android
分享给朋友:

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

金蝶K3实际成本各种计算方法的区别及举例

金蝶K3实际成本各种计算方法的区别及举例

http://blog.sina.cn/dpool/blog/s/blog_166bf582c0102wzcl.html 实际成本各种计算方法的区别及举例 K3WISE实际成本包含四种计算方法,分别是品种法、分步法、分批法和分类法。品种法可视同为分步法的一种特殊情形,即没有中间产品,材料一步...

WCF:在 ServiceModel 客户端配置部分中,找不到引用协定

环境:VS2010 + C#(DLL) + WCF 即我使用C#编写了一个DLL,在DLL里面远程调用WCF服务,然后EXE程序在调用DLL里面的接口时,出现了如下错误: System.InvalidOperationException: 在 ServiceModel 客户端配置部分中,找不到引用协...

Altium打印设置

Altium打印设置

Altium Designer打印有两种方法,一种是利用打印机或者虚拟打印机,将原理图或PCB打印出来;一种是利用其自带的Smart PDF功能将原理图或PCB打印成PDF文档。本文旨在讲述这两种方法。 一、利用打印机打印 首先,设置文档的打印信息。【File】->【Page Setup】...

湿度对电子元器件的影响

潮湿气候对电子元器件有啥影响?网上有说: 1、使绝缘材料性能降低 2、使金属器件锈蚀 3、使润滑剂变质 这些听起来虚虚的,没有直观的概念与感受。我这里说一个最近碰到的问题。 背景:OTP IC(手表用),开窗(未完全封胶),便于用紫外线擦除程序,重复利用OTP IC。近期广东“回南天&r...

带锁存移位寄存器(verilog)

带锁存移位寄存器(verilog)

带锁存的移位寄存器 rclk——锁存时钟 sclk——移位时钟 din——输入数据 dout——输出数据 [shiftBitNumbers——移位寄存器位数 module shi...

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...

发表评论

访客

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