将静态方法传递给另一个活动

时间:2015-03-06 18:26:37

标签: java android this

我的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));建议我不能使用它。在静态方法中。 很抱歉有很多文字,我只是想确保你理解我的问题。对任何建议和实施开放

这里的问题是如何将方法调用到另一个活动中?

2 个答案:

答案 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());
相关问题