2013-08-31 44 views
0

我一直坚持这个问题了几个小时。所以在这里。我有两个不同的活动。第一个菜单包含以下选项:蓝色,红色,绿色,橙色,紫色。只要我点击其中一个,第一个活动的ActionBar的背景颜色就会改变,没有问题。现在,当我尝试为第二个活动做这件事时,问题就开始了。换句话说,只需单击一个Activity中的菜单中的一个选项,就可以在两个Activities中更改这两个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与菜单交易,并允许用户输入选择颜色和设置,它通过getHex方法获取用户选择的颜色并更改其各自的ActionBar bac kground。 这显然不起作用。我试图找到一个简单而漂亮的代码,可以做到这一点,但没有成功。欢迎任何帮助。

回答

0

Settings活动的onCreate方法中创建MainActivity的新实例并不是一个好主意。基本上MA.getHex()总是返回null

如果你只需要设置Settings活动在MainActivity选择的一个操作栏的颜色,通过十六进制值的Settings活动作为额外的意图(使用Intent.putExtra),并把它在Settings.onCreate使用getIntent().getStringExtra(...)

顺便说一句,我想你错过了Settings.onCreate调用setContentView

+0

没了不工作的感谢,无论我学到了一些关于通过variables.The更普遍的问题是,如果你有活动A和活动B和活动A包含在菜单中的选项,可以改变一些东西两个活动A和B你怎么会再次感谢这个谢谢! – user2732847

+0

只要活性B从活性的开始,有几种选择:1)通过将配置数据到B作为额外的意图(如我们已经讨论过)。 2)将配置设置为自定义类的共享实例(例如静态成员或单例),以便B可以在创建时读取它。 3)将配置数据存储在数据库(例如'SQLiteDatabase')中,并在创建B时检索它。 4)将配置数据存储在Context的'SharedPreferences'中,并在创建B时检索它。 – rbarriuso

+0

在任何情况下,只要将代码为“改变的东西”,在A和B是相似的,你可以创建一个包含该共享代码共同的父类。该代码会从某处读取配置并更改活动的外观(在您的示例中)。 – rbarriuso