2012-04-01 72 views
0

在活动我喜欢加载的偏好:的Android在BaseAdapter类使用sharedpreferences

public void LoadFontSize(){ 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     loadedFontSize = sharedPreferences.getString("fontsize", "font3"); 
     } 

而且SharedPreferences sharedPreferences;被全球宣布。

我有一个ExpandBaseAdapter类操作ExpandableListView。我想处理fontsizes在这个类,但它表明我

的方法getApplicationContext()是未定义的类型 ExpandBaseAdapter

错误。

我试图添加sharedPreferences = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE); 但后来我只得到默认值。

如果我添加sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ExpandBaseAdapter.this); 我得到

在类型的方法getDefaultSharedPreferences(上下文) PreferenceManager不适用于参数 (ExpandBaseAdapter)

我应该怎么办?

回答

2

当您在活动中创建此基础适配器的实例时,您必须传递应用程序上下文。

并在基础适配器构造器中声明上下文为属性。

+1

没有,声明你的基础转接器在你的活动这样的,BaseAdapter =新BaseAdapter相同(getApplicationContext());那么在你的基础适配器中使用全局变量Context mContext;那么在基础适配器的构造函数中使用mContext = context;然后在函数中使用mContext。 – 2012-04-01 21:13:40

+0

公平的解释,但是,仍然没有... – erdomester 2012-04-01 21:31:34

+0

是不可能发生的队友,这是你可以通过上下文,尝试解决,也许你失去了一些东西的唯一途径。 – 2012-04-01 21:33:46

1

你必须使用YourActivity.this代替getApplicationContext(),无论是在一般情况下,特别是在你的适配器。

此致敬礼。

(下面编辑)

试试这个,然后:

class ExpandBaseAdapter { 
    Context mContext; 
    void ExpandBaseAdapter(Context context) { 
    mContext = context; 
    } 
} 

,并使用mContext.getSharedPreferences()在你需要它。

+0

这不是一项活动。就像我说的,这是类ExpandBaseAdapter扩展BaseExpandableListAdapter – erdomester 2012-04-01 20:37:50

+0

很难把代码中的注释,所以我编辑我的答案 – pouzzler 2012-04-01 20:46:19

+0

这是我尝试过,见上面 – erdomester 2012-04-01 21:06:36

0

传递一个Context对象为LoadFontSize()作为参数,并用它来获取共享的首选项。

+0

你的意思是LoadFontSize(背景);和public void LoadFontSize(Context zContext){sharedPreferences = zContext.getSharedPreferences(“PREF_NAME”,Context.MODE_PRIVATE); loadedFontSize = sharedPreferences.getString(“fontsize”,“font1”); } ??仍然获得默认值 – erdomester 2012-04-01 21:11:58