以编程方式实现多个按钮状态,而不是单独的按钮

时间:2019-02-26 11:37:22

标签: java android

我有一个开始按钮,用于启动音频记录,一个停止按钮,用于结束录音。

这是开始按钮的Java代码:

    startbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //My code
        }
    });

这是停止按钮的Java代码:

    stopbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //My code
        }
    });

如果需要,这是它们各自的XML布局:

<Button
    android:id="@+id/btnRecord"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="100dp"
    android:layout_marginTop="120dp"
    android:layout_marginBottom="100dp"
    android:text="Start Recording" />

<Button
    android:id="@+id/btnStop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="100dp"
    android:layout_marginBottom="40dp"
    android:text="Stop Recording" />

到目前为止,我使用“ setEnabled(True)”或“ false”来管理应用程序。相反,我需要将这些状态合并到单个按钮中,以便可以对更简单的UI进行“开始/停止”操作。还有更多按钮,但是希望在学习了如何操作后自行修复。干杯!

PS:为了节省空间,我键入了“ //我的代码”而不是实际的代码。如果需要,我可以提供我的代码。

更新:我的日志猫:

2019-02-27 13:17:29.634 8550-8550/com.android.greg.garec E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.greg.garec, PID: 8550
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaRecorder.stop()' on a null object reference
    at com.android.greg.garec.MainActivity$1.onClick(MainActivity.java:96)
    at android.view.View.performClick(View.java:6897)
    at android.widget.TextView.performClick(TextView.java:12693)
    at android.view.View$PerformClick.run(View.java:26101)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

3 个答案:

答案 0 :(得分:0)

嘿,如果您想将两个动作都添加到一个按钮中,那么只需将布尔标志用于状态即可,例如,如果开始并设置了录制,则设置标志 isRecording = true 录制停止时 isRecording = false 。 (注意:在类中设置isRecording全局键)

 startbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     if(isRecording){
         stopRecording();
         isRecording=false;
         startbtn.settext("Start Recording")
       }else{
         startRecording();
         isRecording=true;
         startbtn.settext("Stop Recording")
       }

    }
});

答案 1 :(得分:-1)

使用“自定义”复选框进行记录和停止。 并检查是否选中

答案 2 :(得分:-1)

使用可以将单个按钮与.setTag()一起使用

singleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
 if(singleBtn.getTag().toString().equals("Stop")){
     stopRecording();
     startbtn.settext("Start Recording")
     singleBtn.setTag("Record");
   }else if(singleBtn.getTag().toString().equals("Record")){
     startRecording();
     startbtn.settext("Stop Recording")
     singleBtn.setTag("Stop");
   }

}
});