我的 Android 应用程序中有一个设置部分,用户可以使用单选按钮更改主要 Activity 的背景图像。问题是,当我将存储用户选择的方法变为静态时,我无法使用 this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 来读取首选项。
该方法称为 setColorOnPreference()
,并在主 Activity 的 onCreate 方法上运行,以检查最后用户对背景的选择。但该方法属于设置 Activity 。
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));
提示我不能使用它。在静态方法中。
抱歉,文字太多,我只是想确保您理解我的问题。接受任何建议和实现
这里的问题是我如何将一个方法调用到另一个 Activity 中?
最佳答案
您可以将static
方法更改为:
public static void setColorOnPreference(Context ctx){
SharedPreferences myPrefs2 = ctx.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
....
}
并这样调用它:
public void savepreferencesClicked(View v) {
....
setColorOnPreference(v.getContext());
}
您可以从另一个 Activity 中调用该方法,如下所示:
Settings.setColorOnPreference(this.getApplicationContext());
关于java - 将静态方法传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28905225/