将静态方法传递给另一个 activity

passing a static method to another activity

我的 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?

如果方法是静态的,您可以只使用 class 名称来调用它,如:

MYActivity.methodName();

如果方法是非静态的,您必须先创建 class 的对象,然后调用方法:

MyActivity mObj = new MyActivity();

mObj.methodName();

您可以将 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());