java - 将静态方法传递给另一个 Activity

标签 java android this

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

相关文章:

android - TTS 支持哪些音频格式?

php - 使用 MySQL 查询作为 PHP 脚本的标识,将 FCM 推送通知发送到 Android 应用程序中的特定设备

java - 了解构造函数和 "this"

java - 字符串数组中每个元素的平均长度

android - Flutter_ffmpeg : At least one output file must be specified

java - 如何在struts 2中迭代request属性?

javascript - 选择当前选择框

javascript - 对象函数属性中的 React 类 : Referencing class as "this",

java - XSLT 2.0 和 JDeveloper 11g

java - 使用 Android Activity 的良好实践