2012-12-07 31 views
1

保存實例後我需要共享「int audio」來檢查()方法做幾個操作。我有一個「信息」選項:當我點擊我看到信息對話框,我想聽音頻(當我點擊「取消」時停止它)。但是,當我旋轉模擬器,我有另一個音頻明星。如何在多種方法中共享一個變量?

int audio; 
static int Info; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState); 
if (savedInstanceState != null) { 
int Info = savedInstanceState.getInt("dialoginfo"); 
int audio = savedInstanceState.getInt("audio"); 
} 

if(Info != 0) 
    { 
     Info(); 
} 

private void Info(){ 
    Info = 1; 
    sobCheck(); 
    LayoutInflater li = LayoutInflater.from(this); 
    View view = li.inflate(R.layout.info, null); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(view).create(); 
    TextView text=(TextView) findViewById(R.id.infoView1); 
    builder.setCancelable(false); 
    builder.setPositiveButton("Chiudi", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Info = 0; 
       mp.stop(); 
       mp.reset(); 
       mp.release(); 
       mp = null; 
       audio = 0;     
       dialog.cancel(); 
     } 
     }); 
    builder.show(); 
     } 


private void sobCheck(){ 
if (audio == 0){ 
mp = MediaPlayer.create(this, R.raw.sob); 
mp.start(); 
audio = 1; 
} 



protected void onSaveInstanceState(Bundle outState) { 
super.onSaveInstanceState(outState); 
outState.putInt("audio", a); 

旋轉屏幕後, 「音頻」 始終爲 「0」

+0

請注意Java命名約定:變量名以小寫字母開頭。所以,'static int info;'而不是'static int Info;'。 – ZeroOne

回答

1

您必須聲明它的onCreate()的外部範圍:

int audio; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     audio = savedInstanceState.getInt("audio"); 
} 
+0

對不起:-(我已經在onCreate之前聲明過「audio」 –

+0

那麼,什麼問題? –

+0

在check()方法中,「audio」總是爲0 –

0

您重新初始化 「音頻」 裏面的方法。只需在分配音頻值之前取出「int」即可。

+0

如果我把mediaplayer外面的方法我崩潰了我的應用程序 –

+0

和「音頻」總是不同於1時subCheck()運行 –

3

的問題是,你已經在本地創建的作用域,這裏陰影應用程序級變量的變量:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     int Info = savedInstanceState.getInt("dialoginfo"); 
     int audio = savedInstanceState.getInt("audio"); 
    } 

    if (Info != 0) { 
     Info(); 
    } 
} 

此聲明並初始化2個變量信息音頻被作用域你如果檢查並立即丟棄。它們實際上並不改變你在onCreate方法之外聲明的應用程序級變量。嘗試將其更改爲這樣:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     Info = savedInstanceState.getInt("dialoginfo"); 
     audio = savedInstanceState.getInt("audio"); 
    } 

    if (Info != 0) { 
     Info(); 
    } 
} 

這可以防止信息音頻在本地範圍內被重新聲明,而應導致被初始化您已經聲明的變量。

相關問題