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

添加 PreferenceFragment到FragmentPagerAdapter

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

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

CodeBlocks安装error:can't find compiler executable in your ...

CodeBlocks安装error:can't find compiler executable in your ...

参考资料:http://blog.sina.com.cn/s/blog_5fea94370102vait.html 问题描述: 第一次安装CodeBlocks,安装到了D盘,非默认目录。打开过软件。后来操作失误,卸载了。 第二次安装CodeBlocks,安装在了默认盘C盘,安装后再次打开,提示找不到...

Android:default activity not found

Android:default activity not found

Android:default activity not found 顾名思义,没有默认的activity 一般是AndroidManifest.xml里少了几句话,如图所示: 注意红色框框中的区域...

金蝶K3:api说明打开只有网页的头,没有内容

金蝶K3:api说明打开只有网页的头,没有内容

问题描述 api说明打开只有网页的头,没有内容。问题的图片如下: 问题原因 检查api日志可以看到如下内容:数据库访问异常,请联系管理员... 解决方案 打开账套管理--点击异常账套--点击左上角的属性,检查配置的身份是不是SQL server身份认证,是不是没有填写sa的密码。...

穆斯林朝拜方向计算Qibla Direction

穆斯林朝拜方向计算Qibla Direction

穆斯林礼拜都是朝向麦加的“克尔白”(Kaaba)。在中国,大家都知道是向西。但是,很多人并不清楚到底是向“正”西,还是向朝西的某个角度。精确的方向该如何计算?这个问题就等同于:已知两地(其中一地是麦加)的经度,纬度,如何求方位角。学术的讲法就是大地主题...

Windows7自带计算器计算反三角函数

Windows7自带计算器计算反三角函数

开始->所有程序->附件->计算器 查看->选择科学型 点击【Inv】,即可进入反三角函数的计算。...

ios宏: 判断是否是retina屏,是否iPad,设备判断(4,5,5s,6等)

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #def...

发表评论

访客

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