【问题标题】:Getting a variable out of a Public Void (Android)从公共空白中获取变量(Android)
【发布时间】:2010-04-21 17:44:42
【问题描述】:

我有这个代码:

    hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
      final MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
      mp2.start();
        }
        public void onNothingSelected(AdapterView<?> parentView) {
        }
    });

(代码基本上是在从微调器中选择一个新项目然后播放一首歌曲时运行,-稍后将是一个基于所选内容的变量,但我现在还好)

问题:

并且我希望能够在这个公共空间之外使用“mp2”,(我想要一个暂停它的按钮) 我该怎么做?

请解释/显示...

非常感谢

詹姆斯

【问题讨论】:

    标签: java android eclipse variables media-player


    【解决方案1】:

    将变量mp2 移动到父类的实例中。这将保持对它的运行引用,您可以随时与之交互。您将需要删除 final 限定符,但如果 MediaPlayer.create(...) 将被多次调用并存储。


    编辑:

    我指的是类似这样的东西:

    class SomeClass {
        private MediaPlayer mp2 = null;
    
        private void whateverFunctionYouAreIn() {
            hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                    SomeClass.this.mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
                    SomeClass.this.mp2.start();
                }
                public void onNothingSelected(AdapterView<?> parentView) {}
            });
    
            //TODO: put this in an onClickListener:
            if (this.mp2 != null) {
                this.mp2.pause();
            }
        }
    }
    

    【讨论】:

    • 我需要它在里面......(出于对克里斯的回答发表评论的原因)
    • 查看我的编辑。与您的代码完全相同,只是您将 MediaPlayer 对象存储在主类实例中。
    • 那么我只是将(暂停)按钮放在“某些课程”中 - 但不是放在私人空白中? - 它会起作用吗?
    • 你可以把暂停的东西放在你想要的任何地方。我假设您在 onCreate 方法中执行所有这些操作(如果我没记错的话),所以当您执行 pauseButton.setOnClickListener(new OnClickListener() { ... }); 时,将 TODO 部分放在那里。
    • 好的,是的,我认为这是有效的,除了一个问题,它根本不运行,-没有播放过音乐,所以我认为私有函数存在问题,'private void whateverFunctionYouAreIn( ) { ' - 它是否与/单独运行?要不然是啥? - 还是班级?是被称为 - 还是不需要?
    【解决方案2】:

    我不确定当您调用 MediaPlayer.create(Textbox.this, R.raw.hero) 时会发生什么,但假设它没有立即影响,您可以在侦听器之外创建对象。


    Edit1:好的,那么这个怎么样?

    MediaPlayer currentPlayer;
    
    methodA()
    {
       hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
       {
           public void onItemSelected(AdapterView<?> parentView,
                 View selectedItemView, int position, long id)
           {
              MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero);
              mp2.start();
              setPlayer(mp2);
           }
           public void onNothingSelected(AdapterView<?> parentView) {
        }
    });
    
    
    setMediaPlayer(MediaPlayer player)
    {
       currentPlayer = player;
    }
    

    【讨论】:

    • 是的,我知道,但正如我以后所说的(在解决这个问题之后),我将使用 'R.raw.****Variable value from spinner*****' 代替 -找到 mp3 曲目。 -所以它不能出去,-或者可以吗? :)
    • 我不知道 R.raw 来自哪里,不幸的是,我没有 Android 经验,但它听起来不像是一个局部变量,所以你可以把它放在任何你想要的地方。跨度>
    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2012-10-10
    相关资源
    最近更新 更多