如何在Fragment中使用PreferenceFragment

-傅傅傅先生 2014-03-05 10:02:27
如题,搞了两天还是没搞定,所以上来求助了,望有人解决。
用了一个FragmentActivity作为主界面,包含了三个Fragment,实现了一个滑动的效果。
现在我想讲其中一个Fragment,作为一个设置的界面,所以我想使用PreferenceFragment来实现。
如下代码:
一、FragmentActivity代码:

package huahua.viewpager;

import java.util.ArrayList;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.util.Log;

public class MainActivity extends FragmentActivity {
private ViewPager m_vp;
private fragment1 mfragment1;
private fragment2 mfragment2;
private fragment3 mfragment3;
private ArrayList<Fragment> fragmentList;//页面列表
ArrayList<String> titleList = new ArrayList<String>();//标题列表
//通过pagerTabStrip可以设置标题的属性
private PagerTabStrip pagerTabStrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("huahua", "MainActivity-->onCreate()");
m_vp = (ViewPager)findViewById(R.id.viewpager);
pagerTabStrip=(PagerTabStrip) findViewById(R.id.pagertab);
mfragment1 = new fragment1();
mfragment2 = new fragment2();
mfragment3 = new fragment3();
fragmentList = new ArrayList<Fragment>();
fragmentList.add(mfragment1);
fragmentList.add(mfragment2);
fragmentList.add(mfragment3);
titleList.add("第一页 ");
titleList.add("第二页");
titleList.add("第三页 ");
m_vp.setOffscreenPageLimit(0);
m_vp.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager()));
//设置下划线的颜色
pagerTabStrip.setTabIndicatorColor(getResources().getColor(android.R.color.holo_green_dark));
//设置背景的颜色
pagerTabStrip.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_dark));
}
public class MyViewPagerAdapter extends FragmentPagerAdapter{
public MyViewPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
return fragmentList.get(arg0);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}
}
}




这个是其中的一个Fragment,我想在这个Fragment页面上实现PreferenceFragment的效果,但是这样做行不通,
getActivity().getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();

这行代码以及下面的PrefsFragement静态类都是我期望实现的。真的不知道如何解决了。求教各位,万分感激。
这个Fragment和PreferenceFragment并不是继承关系,这里的Fragment使用的是android.support.v4.app.Fragment下面的Fragment。


package huahua.viewpager;

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class fragment3 extends Fragment{
private View mMainView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("huahua", "fragment3-->onCreate()");
LayoutInflater inflater = getActivity().getLayoutInflater();
mMainView = inflater.inflate(R.layout.fragment3, (ViewGroup)getActivity().findViewById(R.id.viewpager), false);
getActivity().getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();//希望添加的
}
public static class PrefsFragement extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v("huahua", "fragment3-->onCreateView()");
ViewGroup p = (ViewGroup) mMainView.getParent();
if (p != null) {
p.removeAllViewsInLayout();
Log.v("huahua", "fragment3-->移除已存在的View");
}
return mMainView;
}
}
...全文
1503 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pipixiong999 2016-09-14
  • 打赏
  • 举报
回复
用V13包里的方法 dependencies添加 : compile 'com.android.support:support-v4:23.4.0' compile 'com.android.support:appcompat-v7:23.4.0' compile "com.android.support:support-v13:23.4.0"
z1032689332 2016-04-15
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/11786229/add-preferencefragment-on-fragmentpageradapter 是正解,使用v13的FragmentPagerAdapter,它里面的getItem()返回的是android.app.Fragment,即可解决这个问题。
maocanmao 2014-03-19
  • 打赏
  • 举报
回复
我和你遇到同样的问题,下面有三个在stackoverflow中同样的问题的解答,你可以去看看 http://stackoverflow.com/questions/11786229/add-preferencefragment-on-fragmentpageradapter http://stackoverflow.com/questions/20134732/fragment-getitem-int-arg0-return-a-preferencefragment http://stackoverflow.com/questions/15845632/adding-preferencefragment-to-fragmentpageradapter
jxmlh001 2014-03-16
  • 打赏
  • 举报
回复
解决方法 沈亚成
-傅傅傅先生 2014-03-06
  • 打赏
  • 举报
回复
- - .没有回复。。。

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧