我正在开发的应用程序有一个扩展 SherlockFragmentActivity
的 Activity 。我想使用首选项 api 以便轻松地向 Activity 添加首选项。因为我想支持 api 级别 8 及更高级别,所以我必须从类 SherlockPreferenceActivity
扩展 Activity 。
问题是 Activity 需要显示一个对话框。该对话框扩展 SherlockDialogFragment
。对话框的 show()
方法需要两个参数:一个 FragmentManager
对象和一个 String
标签。
为了获得 FragmentManager
对象,我曾经调用 Activity 的 getSupportFragmentManager()
方法。 SherlockPreferenceActivity
中缺少此方法。我尝试使用 getFragmentManager()
但 Eclipse 说
The method show(FragmentManager, String) in the type DialogFragment is not applicable for the arguments (FragmentManager, String)
如何显示来自 SherlockPreferenceActivity
的对话框 fragment ?
最佳答案
你应该使用 Shared Preferences
而不是使用 PreferenceActivity
。在单独的帮助程序类中声明这些引用,而不是将其扩展到 Activity。这使您可以灵活地创建自定义布局。
示例:
public class SharePrefManager {
// Shared Preferences
SharedPreferences pref;
// Editor for Shared preferences
Editor editor;
// Context
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Sharedpref file name
private static final String PREF_NAME = "selfhelppref";
//Your configurable fields
public static final String KEY_PREF1 = "pref1";
public static final String KEY_PREF2 = "pref2";
public static final String KEY_PREF3 = "pref3";
public SharePrefManager(Context context){
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
//Setter function for configurable field
public void setPref(String key, String value){
editor.putString(key, value);
}
//Getter function for configurable field
public String getPref(String key){
return editor.getString(key);
}
}
引用您的 Activity
SharePrefManager SM = new SharePrefManager(this);
SM.setPref(SM.KEY_PREF1, "name");
String value = SM.getPref(SM.KEY_PREF1);
关于Android PreferenceActivity 和对话框 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812602/