簡體   English   中英

如何在多個方法之間共享變量?

[英]How do I share a variable among multiple methods?

保存后的實例我需要共享“int audio”來check()方法做幾個操作。 我有一個“信息”選項:當我點擊時,我看到信息對話框,我想聽音頻(當我點擊“取消”時停止它)。 但是當我旋轉模擬器時,我還有另一個音頻明星。

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”

問題是您創建了本地范圍的變量,這些變量會影響您的應用程序級變量:

    @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();
    }
}

這聲明並初始化兩個變量Info音頻 ,這些變量作為if檢查的范圍,並在之后立即丟棄。 它們實際上並不會更改您在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();
    }
}

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

你必須在onCreate()范圍之外聲明它:

int audio;

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

你重新初始化方法內的“音頻”。 只需在分配音頻值之前取出“int”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM