2013-08-31 82 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