Android学习记录:PreferenceActivity和PreferenceFragment,返回主界面

来源:互联网 发布:前瞻数据库怎么样 编辑:程序博客网 时间:2024/05/12 09:11

昨天学习android开发,创建菜单设置时遇到一系列问题,记录下来。

首先是PreferenceActivity的问题,刚开始按照教程建立了一个加载xml的类,继承自PreferenceActivity,如下

public class PrefsFragement extends PreferenceActivity{public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.settings);}}

发现PreferenceActivity类的addPreferencesFromResource()在android 3.0之后过期失效,就上网查资料发现需要用PreferenceFragment来替换实现,参考网上资料建立一个PrefsFragement类继承PreferenceFragment,然后用该类来创建菜单。

然后发现,菜单创建成功了,然而按一次返回键之后发现回不到主界面,就各种查资料,发现都是这样实现的呀,没找到原因。后又分析代码,发现fragmentTransaction.addToBackStack(null);这一句,为什么是参数是null呢?又查函数,发现该函数的用处:在调用commint()之前,你可以用addToBackStack()把事务添加到一个后退栈中,这个后退栈属于所在的activity。有了它,就可以在用户按下返回键时,返回到fragment们执行事务之前的状态。明白原来是它在作怪,别人的实例是直接在主Activity中来加载xml,用做举例,而我需要的是在我点设置之后转到设置的Activity,把该句删掉,就成功实现了点返回键回到主界面了。

public class PrefsFragement extends PreferenceFragment{public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.settings);}}


public class Prefs extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); FragmentManager fragmentManager = getFragmentManager();          FragmentTransaction fragmentTransaction =               fragmentManager.beginTransaction();          PrefsFragement fragment1 = new PrefsFragement();          fragmentTransaction.replace(android.R.id.content, fragment1);                  fragmentTransaction.addToBackStack(null);//!!!!!!                fragmentTransaction.commit();  }}

                                             
0 0
原创粉丝点击