首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ToggleButton onCheckChangeListener

ToggleButton onCheckChangeListener
EN

Stack Overflow用户
提问于 2013-08-14 18:45:06
回答 1查看 812关注 0票数 0

我正在制作一个有记录按钮和切换按钮的应用程序。记录按钮开始录制声音,切换按钮声明是否必须保存记录按钮,还是只按一次。这就是我想要达到的目的:

代码语言:javascript
运行
复制
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)
            {

            }

如您所见,如果切换按钮是“打开”或“选中”,记录按钮必须按下记录,当您让og按钮,它停止记录。现在这是可行的,但它只有一个缺陷。我将isChecked状态保存为共享首选项,因此,如果我打开切换按钮“打开”,然后重新启动应用程序,切换按钮将保持“打开”,但为了使其正常工作,我将不得不将其关闭或重新打开。因此,如果我重新启动应用程序,它将仍然是“打开”,但它将无法工作。

另外,我还没有编写如果切换按钮为false的代码,如您所见。

现在我的代码:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){

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

从共享首选项获取切换按钮状态:

代码语言:javascript
运行
复制
touchToRecord.setChecked(getCheckedState("touchToRecord"));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 20:09:45

这是关于你的逻辑。您有onCheckedChangeListener,这意味着您将在用户更改Toggle Button时检查它是On还是Off。因此,当您杀死应用程序并重新启动时,由于Toggle Button上没有任何更改,它将无法工作。

把你的onTouchListener放在onCheckedChangeListener外面。在您的onCheckedChangeListener中,设置您的状态(OnOff),在onTouchListener中检查是否是On还是OffE 218并执行您的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18239804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档