Android PreferenceActivity和对话框片段

6
我正在开发的应用程序有一个扩展了的活动。我想使用首选项API轻松地向该活动添加首选项。由于我想支持api级别8及以上,因此必须将活动从类中扩展出来。
问题在于该活动需要显示对话框。该对话框扩展了。对话框的show()方法需要两个参数:FragmentManager对象和String标签。为了获取FragmentManager对象,我曾经调用过活动的getSupportFragmentManager()方法。但是,该方法在中不存在。我尝试使用getFragmentManager(),但Eclipse说:
"The method show(FragmentManager, String) in the type DialogFragment is not applicable for the arguments (FragmentManager, String)"
如何从中显示对话框片段?

我有相同的问题。我们需要从支持包中获取FragmentManager,但在SherlockPreferenceActivity中却没有这样的东西。=( - Louis
1
我用另一种方法解决了这个问题。在同一个包下创建另一个活动(记得将此新活动添加到清单中)。扩展SherlockPreferenceActivity并实现SharedPreferences.OnSharedPreferenceChangeListener接口。查看Android开发者网站以了解如何编写此活动。使用此活动来管理用户首选项。从其他活动中,当用户按设置按钮时,使用意图启动首选项活动。从主活动中,您将能够使用PreferenceManager读取设置。 - Marco Masci
2个回答

0

在编程中,你应该使用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);
   }
}

参照您的活动

SharePrefManager SM = new SharePrefManager(this);
SM.setPref(SM.KEY_PREF1, "name");
String value = SM.getPref(SM.KEY_PREF1);

0

尝试使用SherlockDialogFragment.getSherlockActivity().getSupportFragmentManager()

例如:mySherlockDialogFragment.show(mySherlockDialogFragment.getSherlockActivity().getSupportFragmentManager(), "my_tag");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接