首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多个方法之间共享变量?

如何在多个方法之间共享变量?
EN

Stack Overflow用户
提问于 2012-12-08 02:48:02
回答 3查看 102关注 0票数 1

在保存实例后,我需要共享"int audio“来检查()方法来做几个操作。我有一个“信息”选项:当我点击时,我看到信息对话框,我想听音频(当我点击“取消”时停止它)。但是当我旋转模拟器时,我有了另一个音频星。

代码语言:javascript
运行
复制
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);

旋转屏幕后,"audio“始终为"0”

EN

回答 3

Stack Overflow用户

发布于 2012-12-08 05:54:08

问题是您在这里创建了局部作用域变量,这些变量隐藏了应用程序级别的变量:

代码语言:javascript
运行
复制
    @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方法外部声明的应用程序级别变量。尝试将其更改为以下内容:

代码语言:javascript
运行
复制
    @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和audio在你的局部作用域中被重新声明,而应该导致你已经声明的变量被初始化。

票数 3
EN

Stack Overflow用户

发布于 2012-12-08 02:49:22

您必须在onCreate()作用域之外声明它:

代码语言:javascript
运行
复制
int audio;

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

Stack Overflow用户

发布于 2012-12-08 03:10:28

在方法中重新初始化"audio“。在你给音频赋值之前,去掉"int“即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13769155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档