2012-06-05 109 views
0

我正在尝试使用其audio capture sample code中的一些Google代码。他们简化了他们的代码,并在课堂上进行布局。我想有一个实际的XML布局。我知道如何做到这一点,但我想知道如何将下面的代码更改为onClick方法,并具有随其提供的所有功能。将活动中定义的布局更改为xml布局

class PlayButton extends Button {  
    boolean mStartPlaying = true; 
    OnClickListener clicker = new OnClickListener() { 
     public void onClick(View v) {   
      onPlay(mStartPlaying);    
      if (mStartPlaying) {    
       setText("Stop playing");   
      } else {    
       setText("Start playing");  
      }   
      mStartPlaying = !mStartPlaying;  
     }  
    };  

    public PlayButton(Context ctx) { 
     super(ctx);   
     setText("Start playing");  
     setOnClickListener(clicker);  
    } 
} 

任何帮助表示赞赏。

回答

1

在布局文件,你必须像...

<LinearLayout> 
    <Button android:id="play_button"/> 
</LinearLayout> 

活动中,的onCreate(),然后你可以做这样的事情..

OnClickListener clicker = new OnClickListener() { 
    public void onClick(View v) {   
     onPlay(mStartPlaying);    
     if (mStartPlaying) {    
      setText("Stop playing");   
     } else {    
      setText("Start playing");  
     }   
     mStartPlaying = !mStartPlaying;  
    }  
};  
Button b = findViewById(R.id.play_button); 
b.setOnClickListener(clicker); 

交替,您还可以定义在XML布局将在Activity调用的方法...

<LinearLayout> 
    <Button android:id="play_button" onclick="play"/> 
</LinearLayout> 

,然后我n个Activity您只需创建一个方法,称为play(View view)

public void play(View view) { 
      onPlay(mStartPlaying);    
      if (mStartPlaying) {    
       setText("Stop playing");   
      } else {    
       setText("Start playing");  
      }   
      mStartPlaying = !mStartPlaying;  
} 
0

扩展按钮只是为了设置onClickListener不是一个好主意。当你要添加新的功能时,你只应该扩展一些东西。不是当你打算将它用于不需要额外功能的特定用途时。

Button button = new Button(this); 
button.setOnClickListener(...); 

如果您需要使用XML,则可以使用LayoutInflater以编程方式加载它。

您的布尔isPlaying不是按钮本身的属性,而是它正在播放的媒体的属性。你不应该把它藏在按钮里面。

+0

我知道这一点。 Google编写了该代码。我想知道如何改变它,但我现在明白了。 – user1255273

1

只要定义按钮为ButtonActivity变量声明布尔值。示例...

public class AudioRecordTest extends Activity { 
    ... 
    private Button mPlayButton = null; 
    private boolean mStartPlaying = true; 
    // Do the same for mRecordButton and mStartRecording 
    ... 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     // The next line assumes the play button has the id "@+id/play_button" 
     mPlayButton = (Button)findViewById(R.id.play_button); 
     mPlayButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       onPlay(mStartPlaying);    
       if (mStartPlaying) { 
        ((Button)v).setText("Stop playing"); 
       } else { 
        ((Button)v).setText("Start playing"); 
       } 
       mStartPlaying = !mStartPlaying; 
      } 
     }); 

     // Do the same for the mRecordButton 
    } 
}