在OnCreate中定义Button - 无法解析方法中的符号

时间:2017-08-02 07:51:08

标签: java android button

我是初学者,你会看到。我无法看到我在哪里可以合法地放置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();
        }


    }



}

感谢您的帮助

4 个答案:

答案 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