我已经被这个问题困扰了几个小时。就是这样我有2种不同的活动。第一个菜单包含以下选项:蓝色,红色,绿色,橙色,紫色。只要单击其中一个,第一个Activity的ActionBar的背景颜色就会毫无问题地发生变化。现在,当我也尝试在第二个活动中执行此操作时,问题就开始了。因此,换句话说,只需单击一个活动中菜单中的一个选项,即可更改两个活动中两个ActionBar的背景色。
public class MainActivity extends Activity {
private static String Hex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button all_notes= (Button) findViewById(R.id.All_Notes);
all_notes.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =new Intent(MainActivity.this,AllNotes.class);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
ActionBar bar = getActionBar();
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(this, Hex, Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings:
Intent intent_1= new Intent(MainActivity.this,Settings.class);
startActivity(intent_1);
break;
case R.id.blue:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099cc")));
Hex="#0099cc";
break;
case R.id.pruple:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#9933cc")));
Hex="#9933cc";
break;
case R.id.orange:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFBB33")));
Hex="#FFBB33";
break;
case R.id.red:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#CC0000")));
Hex="#CC0000";
break;
case R.id.green:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#669900")));
Hex="#669900";
break;
default:
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFBB33")));
Hex="#FFBB33";
break;
}
return true;
}
public String getHex()
{
return Hex;
}
}
public class Settings extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
MainActivity MA=new MainActivity();
ActionBar bar=getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(MA.getHex())));
}
}
因此,您可以看到我有Mainactivity,它处理菜单并允许用户输入选择一种颜色,而Setting则通过getHex方法将用户选择的颜色带入并更改其各自的ActionBar背景。这显然行不通。而且,我试图找到一个简单而漂亮的代码,但没有成功。欢迎任何帮助。
[在MainActivity
活动的onCreate
方法中创建Settings
的新实例不是一个好主意。基本上MA.getHex()
总是会返回null
。
[如果只需要将Settings
活动的操作条的颜色设置为MainActivity
中选择的颜色,则将十六进制值作为额外的意图传递给Settings
活动(使用[C0 ]),然后使用Intent.putExtra
在Settings.onCreate
中获取它。
顺便说一句,我认为您错过了getIntent().getStringExtra(...)
中对setContentView
的呼叫。