首页 > 解决方案 > 创建带有 for 循环问题的动态按钮(Android、JAVA)

问题描述

我正在尝试创建代码,根据在单独的 android studio 活动中创建的 wav 文件的数量动态创建不同的媒体播放器按钮。

每个 wav 文件都使用以下文件路径保存

/data/data/com.example.androidaudiorecorder/files/event1.wav

/data/data/com.example.androidaudiorecorder/files/event2.wav

/data/data/com.example.androidaudiorecorder/files/event3.wav

这是创建按钮并将它们放入数组的代码:

   Button[] buttonsPlay = new Button[data];


    for (int loop = 0; loop < data ; loop++) {
        playID ++;

        Button button = new Button(this);
        button.setId(playID);
        button.setText("Play event "+playID);
        String buttonName = "PlayEvent" + playID;
        button.setLayoutParams(new LinearLayout.LayoutParams(500, 50));
        LinearLayout.LayoutParams ll = (LinearLayout.LayoutParams)button.getLayoutParams();
        ll.gravity = Gravity.CENTER;
        button.setLayoutParams(ll);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        button.setLayoutParams(params);
        buttonsPlay[loop] = button;
    }

创建每个按钮后,我想遍历数组中的所有按钮并播放相应的 wav 文件。

这是我迄今为止的尝试

        playID = 0;

  for (int loop = 0 ; loop < buttonsPlay.length ; loop ++){
        playID++;


        Toast.makeText(  ctx, "play is " +  playID , Toast.LENGTH_SHORT).show();

        buttonsPlay[loop] = (Button) findViewById(  buttonsPlay[loop].getId());
        buttonsPlay[loop].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String dataSource = "/data/data/com.example.androidaudiorecorder/files/event"+ playID +".wav";


                playEvent( dataSource);


            }

        });

不幸的是,每次我播放 wav 时,它只会播放最后创建的 wav 事件。

例如,如果有 10 个 wav 文件,则按下的每个按钮都会播放:

“/data/data/com.example.androidaudiorecorder/files/event10.wav”

如果有人对如何纠正此问题有任何建议,我将不胜感激。

标签: javaandroidfor-loop

解决方案


推荐阅读