我的代码中有一种播放音乐的方法,但它不是很有用。红色下划线在一行...这是我的代码:
public class MyActivity2 extends Activity {
private String[] colors;
private String[] values;
private TextView tv;
private RelativeLayout rl;
private MediaPlayer mp;
Button n;
int index = 0;
int position2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity2);
n = (Button) findViewById(R.id.button);
tv = (TextView) findViewById(R.id.textView);
rl = (RelativeLayout) findViewById(R.id.layout_view);
Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
n.setTypeface(typeface);
Typeface face = Typeface.createFromAsset(getAssets(), "OSP-DIN.ttf");
tv.setTypeface(face);
values = getResources().getStringArray(R.array.allthings_array);
colors = getResources().getStringArray(R.array.colorcode_array);
n.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// mp = new MediaPlayer();
mp = MediaPlayer.create(this, R.raw.pop);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setLooping(true);
mp.start();
}
});
n.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (index == 5) {
Toast.makeText(getApplicationContext(), "More coming soon!", Toast.LENGTH_SHORT).show();
} else {
position2 = (index++);
}
String textValue = values[position2];
tv.setText(textValue);
Random RAND = new Random();
int position = RAND.nextInt(colors.length);
String nextValue = colors[position];
rl.setBackgroundColor(Color.parseColor(nextValue));
n.setBackgroundColor(Color.argb(00, 00, 00, 00));
return true;
case MotionEvent.ACTION_UP:
n.setBackgroundColor(Color.argb(00, 00, 00, 00));
return true;
default:
return false;
}
}
});
}
在行:mp = MediaPlayer.create(this,R.raw.pop); ,(这个,R.raw.pop)用红色下划线表示它无法解决方法.. 我该如何解决这个问题?
答案 0 :(得分:3)
MediaPlayer.create()
方法中的第一个参数是上下文。当您在Activity类中时,通常可以使用this
作为上下文。这里棘手的部分,这是Android的一个常见错误,就是该行上的this
指的是您定义的View.OnClickListener
。它被称为匿名内部阶级。
您可以通过将行更改为
来解决此问题mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);
完整的OnClickListener(使用我自己的mp3原始文件验证):
n.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);
mp.setLooping(true);
mp.start();
}
});
答案 1 :(得分:1)
你应该像mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);
那样做,因为你是从内部类做的,因此this
引用onClickListener
而MediaPlayer.create
方法不接受这样的论证。