我正在使用一些代码,我想在引用共享首选项时动态更改背景图像。我有一个活动的例子是:
public class Splash extends Activity {
protected void onCreate(Bundle inputVariableToSendToSuperClass) {
super.onCreate(inputVariableToSendToSuperClass);
setContentView(R.layout.splash);
Initialize();
//Setting background
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String user_choice = prefs.getString("pref_background_choice","blue_glass");
LinearLayout layout = (LinearLayout) findViewById(R.id.activity_splash_layout);
ManagePreferences mp = new ManagePreferences();
mp.setTheBackground(Splash.this, user_choice, layout);
//More code after this...
}
}
ManagePreferences类如下所示:
public class ManagePreferences {
//Empty Constructor
public ManagePreferences(){
}
public void setTheBackground(Context context, String background_choice, LinearLayout layout){
if (background_choice == "blue_glass"){
layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.blue_glass));
} else if (background_choice == "blue_oil_painting")
//etc... with more backgrounds
}
}
问题是,用于设置背景的代码不适用于其他类。如果我将它复制到Splash活动中,我可以使代码工作,但如果我引用该类并调用该方法则不行;我宁愿不要弄乱我的代码。
我要做的就是通过调用此ManagePreferences类来更改Splash Activity中的布局(setBackgroundDrawable)。
全部谢谢!
答案 0 :(得分:2)
1)你做错了。您不应使用Activity
直接创建new
。
2)您应该使用Intent
打开新活动并为其设置参数。
Intent intent = new Intent(context, ManagePreferences.class);
intent.putExtra("user_choice", user_choice);
startActivity(intent);
在ManagePreferences
得到它:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String user_choice = extras.getString("user_choice");
}
UPD :如果您使用ManagePreferences
就像实用工具类一样,请将setTheBackground
设为静态:
public static void setTheBackground(Context context, String background_choice, LinearLayout layout){
if (background_choice == "blue_glass"){
layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.blue_glass));
} else if (background_choice == "blue_oil_painting")
//etc... with more backgrounds
}
layout.requestLayout();
}
并称之为:
ManagePreferences.setTheBackground(this, user_choice, layout);
UPD:,已解答here,您无法执行此操作。当您使用findViewById()
引用布局文件时,android系统仅在您当前的ContentView
中查找此内容。 (即您使用setContentView()
为当前活动设置的视图。)