我的Android应用程序中有一个设置部分,用户使用单选按钮,可以更改主要活动的背景图像。问题是,当我将用户选择的方法转换为静态时,我无法使用this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
来读取首选项。
该方法称为setColorOnPreference()
,并在主要活动的onCreate方法上发布,以检查最后一个用户的背景选择。但该方法属于设置活动。
public class Settings extends Activity {
private final static String userSettings="userSettings.txt";
private EditText txtEditor;
static LinearLayout mScreen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
txtEditor=(EditText)findViewById(R.id.textbox);
mScreen = (LinearLayout) findViewById(R.id.homeScreen);
try {
InputStream in = openFileInput(userSettings);
if (in != null) {
InputStreamReader tmp=new InputStreamReader(in);
BufferedReader reader=new BufferedReader(tmp);
String str;
StringBuilder buf=new StringBuilder();
while ((str = reader.readLine()) != null) {
buf.append(str);
}
in.close();
txtEditor.setText(buf.toString());
}
}
catch (java.io.FileNotFoundException e) {
}
catch (Throwable t) {
Toast.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG).show();
}
}
public void saveClicked(View v) {
try {
OutputStreamWriter out=
new OutputStreamWriter(openFileOutput(userSettings, 0));
out.write(txtEditor.getText().toString());
out.close();
Toast.makeText(this, "The contents are saved in the file.", Toast.LENGTH_LONG).show();
}
catch (Throwable t) {
Toast.makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG).show();
}
}
public void saveBgColorPreference()
{
RadioGroup g = (RadioGroup) findViewById(R.id.prefgroup);
int selected = g.getCheckedRadioButtonId();
RadioButton b = (RadioButton) findViewById(selected);
String selectedValue = (String) b.getText();
SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("bgcolor", selectedValue);
prefsEditor.commit();
}
public static void setColorOnPreference()
{
SharedPreferences myPrefs2 = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
String prefName = myPrefs2.getString("bgcolor", "Navy Blue");
if(prefName.equals("Navy Blue"))
mScreen.setBackground( getResources().getDrawable(R.drawable.mainbg));
else
mScreen.setBackgroundColor(0xffff0000);
}
public void savepreferencesClicked(View v) {
saveBgColorPreference();
setColorOnPreference();
}
我得到的错误是我可以使用SharedPreferences myPrefs2 = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
以及mScreen.setBackground( getResources().getDrawable(R.drawable.mainbg));
建议我不能使用它。在静态方法中。
很抱歉有很多文字,我只是想确保你理解我的问题。对任何建议和实施开放
这里的问题是如何将方法调用到另一个活动中?
答案 0 :(得分:0)
如果方法是静态的,你只需使用类名称来调用它,如:
MYActivity.methodName();
如果方法是非静态的,则必须首先创建类的对象,然后调用方法:
MyActivity mObj = new MyActivity();
mObj.methodName();
答案 1 :(得分:0)
您可以将static
方法更改为:
public static void setColorOnPreference(Context ctx){
SharedPreferences myPrefs2 = ctx.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
....
}
并将其称为:
public void savepreferencesClicked(View v) {
....
setColorOnPreference(v.getContext());
}
你可以从另一个活动中调用这个方法:
Settings.setColorOnPreference(this.getApplicationContext());