我是初学者,你会看到。我无法看到我在哪里可以合法地放置Button语句和setText语句,所以这将编译。如果我移动一个,则另一个不起作用,反之亦然。我知道OnCreate是受保护的,所以“buttonOne”不会传递给playPhrases方法,但我现在已经改变了一段时间,但没有任何作用。请简单解释一下。
package com.example.android.languageapp;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import static android.R.attr.button;
public class MainActivity extends AppCompatActivity {
MediaPlayer myMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myMediaPlayer = MediaPlayer.create(this, R.raw.hello);
String[] phrases = getResources().getStringArray(R.array.phrase);
Button buttonOne = (Button) findViewById(R.id.button1);
Button buttonTwo = (Button) findViewById(R.id.button2);
Button buttonThree = (Button) findViewById(R.id.button3);
Button buttonFour = (Button) findViewById(R.id.button4);
Button buttonFive = (Button) findViewById(R.id.button5);
Button buttonSix = (Button) findViewById(R.id.button6);
Button buttonSeven = (Button) findViewById(R.id.button7);
Button buttonEight = (Button) findViewById(R.id.button8);
buttonOne.setText(phrases[0]);
buttonTwo.setText(phrases[1]);
buttonThree.setText(phrases[2]);
buttonFour.setText(phrases[3]);
buttonFive.setText(phrases[4]);
buttonSix.setText(phrases[5]);
buttonSeven.setText(phrases[6]);
buttonEight.setText(phrases[7]);
}
public void playPhrases(View clickedButton) {
int id = clickedButton.getId();
Log.i("Button id", "" + id);
if (id == buttonOne.getId()) {
myMediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
myMediaPlayer.start();
}
}
}
感谢您的帮助
答案 0 :(得分:1)
您只需在id
点击监听器中使用playPhrases
,就像这样,
public void playPhrases(View clickedButton) {
int id = clickedButton.getId();
Log.i("Button id", "" + id);
switch (id) {
case R.id.R.id.button1:
// Button 1 operation
myMediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
myMediaPlayer.start();
break;
case R.id.R.id.button2:
// Button 2 operation
break;
case R.id.R.id.button3:
// Button 3 operation
break;
}
// We dont need button object
//if (id == buttonOne.getId()) {
//
// myMediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
//
// myMediaPlayer.start();
//}
}
答案 1 :(得分:0)
在onCreate方法之外声明您的按钮,然后将它们附加到onCreate
中的视图。这样您就可以在班级的任何地方访问它们。我用3个按钮作为例子展示了它,但你可以用同样的方式为所有人做。
这些按钮成为类或全局变量的Data成员,而不是onCreate方法的Local Variables。要了解有关Global Vairables的更多信息,请访问Here
public class MainActivity extends AppCompatActivity {
MediaPlayer myMediaPlayer;
Button buttonOne ,buttonTwo,buttonThree ; // Do it this way first for buttons to create reference
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myMediaPlayer = MediaPlayer.create(this, R.raw.hello);
String[] phrases = getResources().getStringArray(R.array.phrase);
// Access like this
buttonOne = (Button) findViewById(R.id.button1);
buttonTwo = (Button) findViewById(R.id.button2);
buttonThree = (Button) findViewById(R.id.button3);
Button buttonFour = (Button) findViewById(R.id.button4);
Button buttonFive = (Button) findViewById(R.id.button5);
Button buttonSix = (Button) findViewById(R.id.button6);
Button buttonSeven = (Button) findViewById(R.id.button7);
Button buttonEight = (Button) findViewById(R.id.button8);
buttonOne.setText(phrases[0]);
buttonTwo.setText(phrases[1]);
buttonThree.setText(phrases[2]);
buttonFour.setText(phrases[3]);
buttonFive.setText(phrases[4]);
buttonSix.setText(phrases[5]);
buttonSeven.setText(phrases[6]);
buttonEight.setText(phrases[7]);
}
public void playPhrases(View clickedButton) {
int id = clickedButton.getId();
Log.i("Button id", "" + id);
if (id == buttonOne.getId()) {
myMediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
myMediaPlayer.start();
}
}
}
答案 2 :(得分:0)
全局定义按钮变量 试试这个
public class MainActivity extends AppCompatActivity {
MediaPlayer myMediaPlayer;
Button buttonOne;
Button buttonTwo ;
Button buttonThree ;
Button buttonFour;
Button buttonFive;
Button buttonSix ;
Button buttonSeven ;
Button buttonEight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myMediaPlayer = MediaPlayer.create(this, R.raw.hello);
String[] phrases = getResources().getStringArray(R.array.phrase);
buttonOne = (Button) findViewById(R.id.button1);
buttonTwo = (Button) findViewById(R.id.button2);
buttonThree = (Button) findViewById(R.id.button3);
buttonFour = (Button) findViewById(R.id.button4);
buttonFive = (Button) findViewById(R.id.button5);
buttonSix = (Button) findViewById(R.id.button6);
buttonSeven = (Button) findViewById(R.id.button7);
buttonEight = (Button) findViewById(R.id.button8);
buttonOne.setText(phrases[0]);
buttonTwo.setText(phrases[1]);
buttonThree.setText(phrases[2]);
buttonFour.setText(phrases[3]);
buttonFive.setText(phrases[4]);
buttonSix.setText(phrases[5]);
buttonSeven.setText(phrases[6]);
buttonEight.setText(phrases[7]);
}
public void playPhrases(View clickedButton) {
int id = clickedButton.getId();
Log.i("Button id", "" + id);
if (id == buttonOne.getId()) {
myMediaPlayer = MediaPlayer.create(this, R.raw.doyouspeakenglish);
myMediaPlayer.start();
}
}
}
答案 3 :(得分:0)
您必须将按钮变量的声明移出OnCreate方法以全局声明它。 按钮按钮1;必须在MainActivity类中,如果在方法中声明它不能在另一个中使用它; 然后你仍然可以这样做:buttonOne =(Button)findViewById(R.id.button1);在OnCreate