简体   繁体   English

ToggleButton onCheckChangeListener

[英]ToggleButton onCheckChangeListener

I'm making an app that has a record button and a togglebutton. 我正在制作一个有记录按钮和togglebutton的应用程序。 The record button starts recording sound and the togglebutton declares whether the record button has to be HELD to record or only pressed once. 录制按钮开始录制声音,并且togglebutton声明录制按钮是否必须是HELD才能录制或仅按一次。 This is how I'm trying to achieve it: 这就是我试图实现它的方式:

touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            saveCheckedState("touchToRecord", isChecked);

            if (isChecked)
            {
                recBtn.setOnTouchListener(new OnTouchListener(){

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {

                        if (event.getAction() == MotionEvent.ACTION_DOWN)
                        {
                            recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
                            chTimer.setBase(SystemClock.elapsedRealtime());
                            chTimer.setText("00:00:00");
                            chTimer.start();
                            chTimer.setTextColor(Color.GREEN);
                            startRecording();
                        }
                        else if (event.getAction() == MotionEvent.ACTION_UP)
                        {
                            recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
                            chTimer.stop();
                            chTimer.setBase(SystemClock.elapsedRealtime());
                            chTimer.setText("00:00:00");
                            chTimer.setTextColor(Color.GRAY);
                            stopRecording();
                            nameAlert();
                        }
                        return true;
                    }
                });
            }
            else if (isChecked == false)
            {

            }

As you can see, if togglebutton is 'on' or 'checked', the record button has to be held down to record, and when you let og of the button, it stops recording. 正如您所看到的,如果togglebutton为“on”或“checked”,则必须按住录制按钮进行录制,当您按下按钮时,它将停止录制。 Now this works but it only have one flaw. 现在这个有效,但它只有一个缺陷。 I am saving the isChecked state to sharedpreferences, so if I turn the togglebutton 'on' and then restart the app, the togglebutton will remain 'on', but I'll have to turn it back off and on again for it to work. 我将isChecked状态保存为sharedpreferences,所以如果我将'togglebutton'打开'然后重新启动应用程序,togglebutton将保持'on',但是我必须将其关闭然后再打开以使其工作。 So if I restart the app, it'll be still 'on' but it won't work. 因此,如果我重新启动应用程序,它仍将“打开”,但它将无法正常工作。

Also, I haven't yet written the code for what happens if the togglebutton is false, as you can see. 此外,我还没有编写代码,如果togglebutton为false,会发生什么,正如您所看到的。

My code now: 我的代码现在:

if (touchToRecord.isChecked() == true)
    {
         recBtn.setOnTouchListener(new OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN)
                {
                    recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
                    startTimer();
                    startRecording();
                }
                else if (event.getAction() == MotionEvent.ACTION_UP)
                {
                    recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
                    stopTimer();
                    stopRecording();
                    nameAlert();
                }
            return true;
            }
        });
    }

    if (touchToRecord.isChecked() == false)
    {
        recBtn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                if (recorder == null)
                {
                    recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed);
                    startTimer();
                    startRecording();
                }
                else if (recorder != null)
                {
                    recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
                    stopTimer();
                    stopRecording();
                    nameAlert();
                }
            }
        });
    }

OnCheckedChangeListener: OnCheckedChangeListener:

touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            saveCheckedState("touchToRecord", isChecked);
        }
    });

Get togglebutton state from shared preferences: 从共享首选项获取togglebutton状态:

touchToRecord.setChecked(getCheckedState("touchToRecord"));

It is about your logic. 这是关于你的逻辑。 You have onCheckedChangeListener , which means you will check if it is On or Off when user change the Toggle Button . 你有onCheckedChangeListener ,这意味着你会在用户更改Toggle Button时检查它是On还是Off So when you kill app and start again, since there is no change on Toggle Button , it won't work. 所以当你杀死app并重新开始时,由于Toggle Button没有变化,它将无法工作。

Put your onTouchListener outside the onCheckedChangeListener . 把你的onTouchListener外面onCheckedChangeListener In your onCheckedChangeListener set your status( On or Off ) and inside the onTouchListener check if it is On or Off and perform your actions. onCheckedChangeListener设置您的状态( OnOff )和onTouchListener内部检查它是On还是Off并执行您的操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM