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

添加 PreferenceFragment到FragmentPagerAdapter

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

如何添加 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” 的相关文章

布丁软件引起的桌面闪烁

问题描述: 进入桌面后,屏幕闪烁。 查找到系统日志: 错误应用程序名称: explorer.exe,版本: 6.3.9600.18231,时间戳: 0x56b8c9f1 错误模块名称: PDZipMenu64.dll,版本: 1.4.3.11014,时间戳: 0x5da4349a 异常代码: 0xc...

数模转换器分类

数模转换器分类

权电阻网络DAC (1)电路结构 构成权电阻网络的电阻的阻值,与该位的位权值成反比。 (2)工作原理 运算放大器的Σ点是虚地,该点电位总是近似为零。对于输入二进制数中的任意一位Di有: 若Di=0,流过该位权电阻的电流为Ii=0; 若Di=1,流过该位权电阻的电流为: 所以,流过Di...

IAR Fatal Error[Cp001]解决

IAR Fatal Error[Cp001]解决

很久没用IAR了,这次重新折腾MSP430,安装软件后,编译程序,提示一个莫名奇妙的错误,以前一直没碰到过,错误内容如下: Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20]...

Keil优化导致代码出错

Keil优化导致代码出错

Keil在优化代码的时候,对于一些隐式调用,会出错的。 例如(以下例子来源于参考资料): 你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它: void (*UserProgram)();    &...

程序加载水晶报表

重点就是doc.load ReportDocument doc = new ReportDocument();         TreeEntityList sources = new TreeEntityList (); &nb...

常用电平标准

常用电平标准

现在常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的LVDS、GTL、PGTL、CML、HSTL、SSTL等。下面简单介绍一下各自的供电电源、电平标准以及使用注意事项。 1、TTL电平 TTL:Transi...

发表评论

访客

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