2012-06-05 93 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 
    } 
}