ToggleButton onCheckChangeListener

时间:2013-08-14 18:45:07

标签: java android eclipse togglebutton

我正在创建一个具有记录按钮和togglebutton的应用程序。录制按钮开始录制声音,并且togglebutton声明录制按钮是否必须是HELD才能录制或仅按一次。这就是我试图实现它的方式:

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)
            {

            }

正如您所看到的,如果togglebutton是'on'或'checked',则必须按住录制按钮进行录制,当您按下按钮时,它会停止录制。现在这个有效,但它只有一个缺陷。我将isChecked状态保存为sharedpreferences,所以如果我将'togglebutton'打开'然后重新启动应用程序,togglebutton将保持'on',但是我必须将其关闭然后再打开以使其工作。因此,如果我重新启动应用程序,它仍将“打开”,但它将无效。

此外,我还没有编写代码,以了解如果togglebutton为false会发生什么,正如您所看到的那样。

我的代码现在:

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:

touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){

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

从共享首选项中获取togglebutton状态:

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

1 个答案:

答案 0 :(得分:2)

这是关于你的逻辑。您有onCheckedChangeListener,这意味着当用户更改Toggle Button时,您将检查是开启还是关闭。所以当你杀死app并重新开始时,由于Toggle Button没有变化,它将无效。

onTouchListener放在onCheckedChangeListener之外。在onCheckedChangeListener设置您的状态(开启关闭)并在onTouchListener内查看是否开启关闭并执行您的操作。