android - 为什么我的 else 语句不适用于具有两个功能的 Cardview?

标签 android android-studio onclick android-button android-cardview

我有一个用作启动/停止功能的 CardView。

开始,当被按下时,工作。但是停止将不起作用。我知道 onClick 事件在 TextView 更改时起作用,但实际功能不起作用。非常感谢任何帮助。我将在下面发布整个代码。

 //Defining Cards on Landing Page
    appsCard = (CardView) findViewById(R.id.apps_card);
    parentalControlsCard = (CardView) findViewById(R.id.parentalControls_id);
    customSettingsCard = (CardView) findViewById(R.id.customSettings);
    activateCard = (CardView) findViewById(R.id.activate_id);
    StartStopCard = (CardView) findViewById(R.id.StartStopCard);


    //Add OnClick Listeners
    appsCard.setOnClickListener(this);
    parentalControlsCard.setOnClickListener(this);
    customSettingsCard.setOnClickListener(this);
    activateCard.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (ruleSets.isEmpty()) {
                Toast.makeText(LandingPage.this, "You did not create a custom setting.", Toast.LENGTH_SHORT).show();
            } else {
                PendingIntent pending_start;
                PendingIntent pending_stop;
                Intent startIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                Intent stopIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                Calendar startTime = new GregorianCalendar();
                Calendar endTime = new GregorianCalendar();
                String startString = ruleSets.get(0).getStartTime();
                String endString = ruleSets.get(0).getEndTime();

                String[] startArr = startString.split(":");
                String[] endArr = endString.split(":");

                startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startArr[0]));
                startTime.set(Calendar.MINUTE, Integer.parseInt(startArr[1]));

                endTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endArr[0]));
                endTime.set(Calendar.MINUTE, Integer.parseInt(endArr[1]));

                pending_start = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                pending_stop = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

                startIntent.putExtra("status", "start");
                stopIntent.putExtra("status", "stop");

                Toast.makeText(LandingPage.this, "Your ruleset will start at " + startString, Toast.LENGTH_SHORT).show();

                setStatus("Lock Active");
                setProcess("Stop");

                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_start);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_stop);
            }
        }
    });


    CardView StartStopCard = (CardView) findViewById(R.id.StartStopCard);
    StartStopCard.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        mStarted = !mStarted;
            if (mStarted) {
                mStarted=false;
                SharedPreferences setting = getSharedPreferences("PREFS", 0);
                SharedPreferences.Editor editor = setting.edit();
                editor.remove("switcher");
                editor.remove("switcher2");
                editor.remove("lockStatus");
                editor.remove("processStatus");
                editor.commit();
                editor.putString("switcher", "true");
                editor.putString("switcher2", "true");
                editor.putString("lockStatus", "Lock Active");
                editor.putString("processStatus", "Start");
                editor.apply();
                intent.putExtra("status", "start");
                sendBroadcast(intent);
                intent.putExtra("processStatus", "start");
                sendBroadcast(intent);
                String status = setting.getString("lockStatus", "");
                setStatus(status);
                String processStatus = setting.getString("processStatus" , "");
                setProcess(processStatus);

            }
            else {
                mStarted= true;
                SharedPreferences setting = getSharedPreferences("PREFS", 0);
                SharedPreferences.Editor editor = setting.edit();
                editor.remove("switcher");
                editor.remove("switcher2");
                editor.remove("lockStatus");
                editor.remove("processStatus");
                editor.commit();
                editor.putString("switcher", "false");
                editor.putString("switcher2", "false");
                editor.putString("lockStatus", "Lock Deactivated");
                editor.putString("processStatus", "Stop");
                editor.apply();
                intent.putExtra("status", "stop");
                sendBroadcast(intent);
                intent.putExtra("processStatus", "start");
                sendBroadcast(intent);
                String status = setting.getString("lockStatus", "");
                setStatus(status);
                String processStatus = setting.getString("processStatus" , "");
                setProcess(processStatus);

            }
        }

    });

}

................................................ ...........................................

最佳答案

问题出在这里

 mStarted = !mStarted;
        if (mStarted) {
            mStarted=false;
            ...
        else{
            mStarted = true;
        ...
        }

假设您的 mStartedtrue 开始。它在 if 语句之前恢复,然后再次变为 true,因为它转到 else。当你按下按钮时,它会做同样的事情,它会被还原并转到相同的其他地方。如果 mStarted 从一开始就为 false,则相同。关键是,它总是会去同一个分支。

如果您想切换点击行为(每次点击都会转到 if 语句的不同分支),那么您可以删除 mStarted = !mStarted; 或删除 mStarted 来自分支机构的作业。

关于android - 为什么我的 else 语句不适用于具有两个功能的 Cardview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181820/

相关文章:

android - 完成时未触发 OnActivityResult

android - Appcelerator [错误] : Invalid "--device-id" value

java - Activity 未找到异常 : Unable to find explicit activity class?

android - 我应该在Android Studio中使用哪个appcompat版本?

android - MediaPlayer.OnCompletionListener 和 View.OnClickListener?

android - 将从 firebase 检索到的键值添加到 arraylist 不起作用

Android studio 3.0 Canary 6 执行 com.android.build.gradle.tasks.MergeResources$FileGenerationWorkAction 时发生故障

Android Studio SDK下载位置

php - jQuery PHP 在函数内传递值与实时点击?

java - boolean onClickEventListener 返回的目的