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

添加 PreferenceFragment到FragmentPagerAdapter

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

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

AutoCAD转Altium

以前写过一篇文章,讲述了AutoCAD如何转Protel99SE [AutoCAD转Protel99SE及丢线问题解决] 现在公司不允许用Protel99SE了(因版权问题),买了正版的Altium。因此,要将AutoCAD转Altium,其实是可以用上面的办法的,那个办法依旧有效。 还有一个...

MSP430 C语言的关键字扩展

1.interrupt 用于中断函数。 定义如下: 语法: interrupt void 函数名()          或者        interrupt[中断向量]void...

Keil C51中嵌入汇编

Keil C51中嵌入汇编

   我们知道,用C语言实现精确延时是一件比较困难的事情,而用汇编写精确延时程序就简单多了,但是整个程序都用汇编,那就是件头疼的事情。要是能在C里面嵌入汇编,那就爽了,本文介绍的就是如何在Keil C51里嵌入汇编。   1、在 C 文件中以如下方式加入汇编代...

Android BLE:onServicesDiscovered(BluetoothGatt gatt, int status) 没有回调过

问题: .discoverServices()调用之后,却永远不回调onServicesDiscovered(BluetoothGatt gatt, int status) 基本代码如下: public void onConnectionStateChange(BluetoothGatt gatt...

ML610Q473 程序烧录

ML610Q473 程序烧录

仿真器能够仿真程序的运行,但毕竟是“仿”,与实际情况可能有些出入,因此最终还是要将程序烧录到实际的目标板中。 对于ML610Q473,大体要有这么几步: (1) uEase与目标板连接 (2) 生成Hex文件 (3)转换Hex文件供烧录 1、uEase与目标板连接 (1)...

二极管主要技术参数

描述二极管特性的物理量称为二极管的参数,它是反映二极管电性能的质量指标,是合理选择和使用二极管的主要依据。 1、电气参数 (1)正向压降VF VF:Forward Voltage,正向压降。是二极管在规定正向电流IF规定结温Tj下的正向电压。 (2)反向电流IR IR:Reverse Cu...

发表评论

访客

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