0

自動化インストゥルメントを再生しようとしていますが、実行可能なループを停止することに固執しています。ここに私の完全なコードMainActivity.javaがあります。

    public class MainActivity extends Activity implements OnClickListener{

    Button bt1,bt2;
    Handler handler;
    Runnable runnable;
    MediaPlayer mp;
    int i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bt1 = (Button)findViewById(R.id.button1);
        bt2 = (Button)findViewById(R.id.button2);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);

        mp = MediaPlayer.create(MainActivity.this, R.raw.sound);
    }

    void playInstrument(){
        if(mp.isPlaying()){
            mp.release();
        }
        mp = MediaPlayer.create(MainActivity.this, R.raw.sound);
        mp.start();
    }

    void play(){
        i=0;
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                i++;
                System.out.println(i);
                if(i==3){
                    System.out.println("Finish Playing");
                    MainActivity.this.handler.removeCallbacks(MainActivity.this.runnable);
                }
                playInstrument();
                handler.postDelayed(this, 1000);
            }
        };
        runnable.run();
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.button1:
            play();
            break;
        case R.id.button2:
            handler.removeCallbacks(runnable);
            break;
        }
    }

}

xml activity_main.xmlは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="43dp"
        android:text="Start" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="36dp"
        android:text="Stop" />
</RelativeLayout>

button1 クリックを使用して停止できますが、i の値が既に 3 の場合に自動的に停止しないのはなぜですか? Log Cat でFinish Playingが表示されますが、ループし続けます。たぶん、私が理解していないのは単にJavaishの問題です

4

1 に答える 1