我已经坚持这个问题几个小时了。所以这就是。我有2个不同的活动。第一个菜单包含以下选项:蓝色,红色,绿色,橙色,紫色。一旦我单击其中一个,第一个Activity的ActionBar的背景颜色就会发生变化而没有任何问题。现在,当我尝试为第二个活动执行此操作时,问题就开始了。换句话说,只需单击一个活动的菜单中的选项,就可以在两个活动中更改两个ActionBars背景颜色。
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背景。 这显然不起作用。我试图找到一个简单而漂亮的代码,可以做到这一点,但没有成功。欢迎任何帮助。
答案 0 :(得分:0)
在MainActivity
活动的onCreate
方法中创建Settings
的新实例并不是一个好主意。基本上MA.getHex()
将始终返回null
。
如果您只需要将Settings
活动的操作栏的颜色设置为MainActivity
中选定的颜色,请将十六进制值作为额外值传递给Settings
活动在意图中(使用Intent.putExtra
)并使用Settings.onCreate
在getIntent().getStringExtra(...)
中获取。
顺便说一下,我想你错过了setContentView
中Settings.onCreate
的来电。