2017-08-02 14 views
3

我是一个初学者,你会看到。我看不到我可以合法放置Button语句和setText语句的位置,以便编译。如果我移动另一个不起作用,反之亦然。我明白,OnCreate是受保护的,所以“buttonOne”不会传递给playPhrases方法,但我现在已经改变了一段时间,没有任何工作。请简单说明。在OnCreate中定义按钮 - 无法解析方法中的符号

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

你已经宣布的OnCreate外的MediaPlayer()为按钮,TextView的,等等......请通过基本的Android的开发之前以类似的方式做。 – livemaker

+0

我说之前,机器人经过Java基础,让你真正了解你的错误:) 下面是详细了解变量范围的链接:http://www.javawithus.com/tutorial/scope-and-lifetime-变数 – ChrisCarneiro

回答

0

声明你的按钮onCreate方法外,然后将其连接到的意见在onCreate。这样你可以在课程的任何地方访问它们。我已经用3个按钮作为示例显示了它,但您可以按照相同的方式完成所有操作。

这些按钮成为类的数据成员或全局变量,而不是onCreate方法的局部变量。要了解更多关于全球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(); 
    } 


} 



} 
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(); 
    } 


} 

}

0

你只使用在playPhrases点击收听这样使用id

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(); 
    //} 


} 
0

您必须将您的按钮变量声明移出OnCreate方法以在全局声明它。 按钮buttonOne;必须在MainActivity类中,如果在方法中声明它不能在另一个类中使用; 然后你仍然可以这样做:buttonOne =(Button)findViewById(R.id.button1);在OnCreate中

+0

感谢大家。 – Cwill