[英]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.