对Learning Android一书第89页的代码调试发现,PreferenceActivity类已经过时,网上推荐使用PreferenceFragment类。虽然两个类的方法类似,但是在使用过程中发现很多问题,总结如下:
第一次只是简单的将PreferenceActivity改为了PreferenceFragment,其余代码不变。
public class PrefsActivity extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}</span>
结果,程序可以成功在手机终端上运行但是点击菜单按钮后出现“prefs”,再点击它之后程序直接跳出,并没有出现
username
password
这样的界面,在网上找了关于PreferenceFragment相关的资料后将代码PrefsActivity类改为如下:
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.app.Activity;
public class PrefsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new PrefsFragement()).commit();
}
public class PrefsFragement extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
}
程序运行成功,如图所示:
此外在编写过程中注意需要将新增加的PrefsActivity类在AndroidManifest.xml文件中进行注册,否则编译无法通过。
添加与注册方式参见Learning Android一书第七章。