添加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
相关产品推荐
相关产品推荐

