【问题标题】:Android PreferenceActivity and dialog fragmentsAndroid PreferenceActivity 和对话框片段
【发布时间】:2013-02-11 13:06:59
【问题描述】:

我正在开发的应用程序有一个扩展SherlockFragmentActivity 的活动。我想使用首选项 api 以便轻松地将首选项添加到活动中。由于我想支持 api 级别 8 及以上,我必须从 SherlockPreferenceActivity 类扩展活动。

问题是活动需要显示一个对话框。该对话框扩展SherlockDialogFragment。对话框的show() 方法需要两个参数:FragmentManager 对象和String 标记。
为了得到FragmentManager对象,我曾经调用了activity的getSupportFragmentManager()方法。 SherlockPreferenceActivity 中缺少此方法。我尝试使用 getFragmentManager() 但 Eclipse 说

DialogFragment 类型中的方法 show(FragmentManager, String) 是 不适用于参数(FragmentManager、String)

如何显示来自SherlockPreferenceActivity 的对话框片段?

【问题讨论】:

  • 我也有同样的问题。我们需要从支持包中获取 FragmentManager 但在 SherlockPreferenceActivity 中没有这样的东西。 =(
  • 我已经用另一种方式解决了。在同一个包下创建另一个活动(记得将这个新活动添加到清单中)。扩展 SherlockPreferenceActivity 并实现接口 SharedPreferences.OnSharedPreferenceChangeListener。查看 android 开发者网站以了解如何编写此活动。使用此活动来管理用户偏好。在另一个活动中,当用户按下设置按钮时,以意图启动偏好活动。从主要活动中,您将能够使用 PreferenceManager 读取设置。

标签: android actionbarsherlock preferenceactivity


【解决方案1】:

您应该使用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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多