Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以动态更改最初在xml中设置的android id和onClick标记吗?_Android_Audio - Fatal编程技术网

可以动态更改最初在xml中设置的android id和onClick标记吗?

可以动态更改最初在xml中设置的android id和onClick标记吗?,android,audio,Android,Audio,是否可以动态更改id和onClick标记 <Button android:id="@+id/actionAudio" android:text="{faw-microphone}" android:layout_weight = "2" android:layout_width="80dp" android:layout_height="60dp" android:onClick="on

是否可以动态更改id和onClick标记

    <Button
        android:id="@+id/actionAudio"
        android:text="{faw-microphone}"
        android:layout_weight = "2"
        android:layout_width="80dp"
        android:layout_height="60dp"
        android:onClick="onRecordAudio" />

例如,我正在尝试录制一段音频,单击带有id和onClick标记的单个按钮。该按钮也将用作停止按钮。为了能够做到这一点,我正在考虑动态地更改这些标记以直观地操作它,以及onclick事件


这种方法行吗,或者有更好的方法来做这件事。非常感谢

您可以使用此方法设置任何
视图的
Id

yourView.setId(int);
然后像这样点击listener

View v = findViewById(id);
v.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
         // Perform action on click
     }
 });

我了解您的情况,因为我两天前刚刚实现了录音和播放音频功能,但是我的回答并不能解决您的问题,但与您的方法相比,它是一种更好、更干净的方法

  • 在xml中创建两个不同的按钮,一个用于记录,另一个用于停止
  • 为onClick指定两种不同的方法
  • 隐藏其中一个按钮,并根据代码中的用户单击事件显示另一个按钮(即相应地更改可见性)
  • 这样,您的逻辑就完全解耦和分离了,您不必在按钮图像、单击事件检查等之间切换

    • 当用户按下记录时,将调用其注册的onClick方法,通过设置可见性(View.go)
    隐藏方法中单击的按钮,并通过设置可见性(View.visible)使停止按钮再次可见,反之亦然
    切换按钮也可以为您完成任务,但稍后当您决定添加新按钮(如播放、暂停声音)时,上述方法将非常适合您。

    您可以通过多种方式完成此操作,但简单的解决方案是使用切换按钮而不是普通按钮

    <ToggleButton  
        android:id="@+id/toggleButton"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentLeft="true"  
        android:layout_alignParentTop="true"  
        android:layout_marginLeft="60dp"  
        android:layout_marginTop="18dp"  
        android:text="ToggleButton1"  
        android:textOn="Record"  
        android:textOff="Stop" /> 
    
    希望这对你有帮助

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        Button button;
        boolean f=true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    // code
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.button:
                    if(f) {
                        button.setText("Stop");
                        f=false;
                        // your code
                    }else{
                        Toast.makeText(this, "Stroped", Toast.LENGTH_SHORT).show();
                        button.setText("Activate");
                        f=true;
                    }
            }
        }
    
    使用if/else执行此操作的最简单方法 您不需要重置id


    别忘了实现View.OnClickListner,还有一种方法可以做到这一点

    button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                if (((String) v.getTag()) != null && ((String) v.getTag()).equalsIgnoreCase("STOP")) {
                    v.setTag("START");
                    // start
                     // you can also use boolean like v.setTag(true)
                } else {
                    v.setTag("STOP");
                    // stop
                }
            }
        });
    

    为什么不使用toogle按钮而不是button,您可以在其onClick()中检查isChecked()?非常感谢您的提示:)这就是我决定使用的。最受欢迎的是,您知道吗,使用这种方法,您可以稍后添加其他按钮(如果您愿意),而不破坏代码,例如播放声音,暂停以暂停声音。每个按钮都有自己的方法,不会出现依赖性问题。祝你好运…谢谢你,我直到现在才知道切换按钮。我肯定会将其用于其他用例。我继续使用设置可见性的方法。:)
    button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                if (((String) v.getTag()) != null && ((String) v.getTag()).equalsIgnoreCase("STOP")) {
                    v.setTag("START");
                    // start
                     // you can also use boolean like v.setTag(true)
                } else {
                    v.setTag("STOP");
                    // stop
                }
            }
        });