You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加TextView点击逻辑后歌曲播放失效,如何同时实现播放与文字展示?

问题原因

给Play按钮同时配置了两种点击事件绑定逻辑:

  • XML布局中通过android:onClick="play"绑定了播放方法
  • Java代码中通过setOnClickListener动态绑定了修改文本的逻辑
    动态设置的OnClickListener会直接覆盖XML配置的点击事件,因此点击按钮时只有修改文本的逻辑生效,播放方法根本没有被调用,导致歌曲无法播放。
解决方案(两种任选即可)

方案1:将修改文本逻辑整合到原有播放方法中(更简洁)

第一步:调整MainActivity代码

把TextView声明为类成员变量,删除动态设置的点击监听器,在play方法中添加修改文本的逻辑,修改后代码如下:

package com.example.moh;

import android.media.MediaPlayer;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {
    MediaPlayer player;
    // 把TextView提升为类成员变量,方便play方法访问
    TextView mytext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mybutton;
        mytext = findViewById(R.id.TextBoxID);
        mybutton = findViewById(R.id.ButtonID);
        // 删除原来的setOnClickListener代码,保留XML的onClick绑定即可
    }


    public void play(View v) {
        if (player == null) {
            player = MediaPlayer.create(this, R.raw.song);
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {

                }
            });
        }
        // 新增修改文本逻辑
        mytext.setText("The sound played successfully");
        player.start();
    }

    public void pause(View v) {
        if (player != null) {
            player.pause();
        }
    }

}

第二步:XML布局无需修改

原有XML的android:onClick="play"保留即可,修改后点击按钮会同时触发修改文本和播放歌曲的逻辑。

方案2:全部使用动态点击事件绑定

第一步:修改MainActivity代码

在动态设置的点击监听器中同时调用播放方法和修改文本:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView mytext;
    Button mybutton;
    mytext = findViewById(R.id.TextBoxID);
    mybutton = findViewById(R.id.ButtonID);
    mybutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mytext.setText("The sound played successfully");
            // 主动调用播放方法
            play(view);
        }
    });
}

第二步:删除XML中Play按钮的onClick属性

把Play按钮的android:onClick="play"这一行删掉,避免逻辑冲突即可。


内容的提问来源于stack exchange,提问作者Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:39:02