0

オーディオキャプチャサンプルコードからGoogleのコードの一部を使用しようとしています。彼らはコードを単純化し、クラス内でレイアウトを作成しました。実際のxmlレイアウトが必要です。私はその部分を行う方法を知っていますが、以下のコードをonClickメソッドに変更し、それで提供されるすべての機能を使用する方法を知りたいです。

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

どんな助けでも大歓迎です。

4

3 に答える 3

1

ボタンをとして定義し、ブール値を変数Buttonとして宣言するだけです。Activity例...

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
    }
}
于 2012-06-05T18:10:57.683 に答える
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);

Activityまたは、 ...で呼び出されるxmlレイアウトでメソッドを定義することもできます。

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

次に、でActivity、と呼ばれるメソッドを作成するだけです。play(View view)

public void play(View view) {
            onPlay(mStartPlaying);            
            if (mStartPlaying) {              
                setText("Stop playing");        
            } else {              
                setText("Start playing");     
            }          
            mStartPlaying = !mStartPlaying;      
}
于 2012-06-05T18:03:46.010 に答える
0

onClickListenerを設定するためだけにボタンを拡張することはお勧めできません。新しい機能を追加する場合にのみ、何かを拡張する必要があります。追加機能を必要としない特定の目的で使用する場合は除きます。

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

XMLを使用する必要がある場合は、LayoutInflaterを使用してプログラムでロードできます。

ブールisPlayingは、ボタン自体のプロパティではなく、ボタンが再生しているメディアのプロパティです。ボタンの中に隠してはいけません。

于 2012-06-05T18:02:55.980 に答える