怎么样在Fragment中使用PreferenceFragment

移动开发 码拜 8年前 (2016-09-24) 1940次浏览
如题,搞了两天还是没搞定,所以上来求帮助了,望有人解决。
用了一个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;
	}
}
解决方案

100

解决方法 沈亚成

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样在Fragment中使用PreferenceFragment
喜欢 (0)
[1034331897@qq.com]
分享 (0)