【问题标题】:How to implement validation onto a switch statement?如何在 switch 语句上实现验证?
【发布时间】:2019-10-08 07:15:42
【问题描述】:

简单的switch 语句,带有下一步按钮作为最后一个案例。我想要它,所以用户必须在 switch 语句中选择一个图像,然后再继续。我不知道如何编写一些东西来阻止他们用户只需单击下一个按钮并移动到下一个活动而不从 switch 语句中进行选择。代码如下。

    public void onClick(View v) {

    SharedPreferences.Editor editorWorkout = workoutPref.edit();

    // get the constraint layout from its ID.
    ConstraintLayout mConstraintLayout = getView().findViewById(R.id.FragmentWorkoutMood1);

    switch (v.getId()) {
        case R.id.excitedFace:
            mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_excited);
            editorWorkout.putInt("excitedkey", EXCITED.getId());
            editorWorkout.commit();
            break;
        case R.id.happyFace:
            mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_happy);
            editorWorkout.putInt("happykey", HAPPY.getId());
            editorWorkout.commit();
            break;
        case R.id.fineFace:
                 mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_fine);
            editorWorkout.putInt("finekey", FINE.getId());
            editorWorkout.commit();
            break;
        case R.id.nextBtnMoodPage:
            Intent intent = new Intent(getActivity(),   WorkoutAutomaticThoughtActivity.class);
            startActivity(intent);
    }

【问题讨论】:

  • 您在实施过程中遇到了什么问题?
  • 我不知道如何写一些东西来阻止他们用户只需单击下一个按钮并移动到下一个活动而不从 switch 语句中进行选择
  • case R.id.nextBtnMoodPage: 之后尝试break; 并调试并检查它是否仍然属于任何情况?
  • case R.id.nextBtnMoodPage: Intent intent = new Intent(getActivity(), WorkoutAutomaticThoughtActivity.class); startActivity(intent); break;
  • 感谢您的帮助,但也许您没有正确理解我的问题。在选择下一个按钮之前,用户必须从开关状态中选择一个图像,如 R.id.happyface。目前,用户只需单击下一步按钮并继续前进,而无需选择图像。这有意义吗?

标签: java android android-switch


【解决方案1】:

您可以从 switch 语句之外启动活动 随便写

按钮按钮下一步。 = findViewById..

buttonNext.SetOnClickListener...

【讨论】:

    【解决方案2】:

    您需要禁用nextBtnMoodPage 执行的操作,直到用户选择了任何其他选项。使用简单的布尔值执行此操作。见下文:

    // Inside the class itself
    private boolean hasSelected = false;
    
    public void onClick(View v) {
    
        SharedPreferences.Editor editorWorkout = workoutPref.edit();
    
        // get the constraint layout from its ID.
        ConstraintLayout mConstraintLayout = getView().findViewById(R.id.FragmentWorkoutMood1);
    
        switch (v.getId()) {
            case R.id.excitedFace:
                mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_excited);
                editorWorkout.putInt("excitedkey", EXCITED.getId());
                editorWorkout.commit();
                hasSelected = true;
                break;
            case R.id.happyFace:
                mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_happy);
                editorWorkout.putInt("happykey", HAPPY.getId());
                editorWorkout.commit();
                hasSelected = true;
                break;
            case R.id.fineFace:
                mConstraintLayout.setBackgroundResource(R.mipmap.background_clouds_fine);
                editorWorkout.putInt("finekey", FINE.getId());
                editorWorkout.commit();
                hasSelected = true;
                break;
            case R.id.nextBtnMoodPage:
                if(hasSelected){
                    Intent intent = new Intent(getActivity(),   WorkoutAutomaticThoughtActivity.class);
                    startActivity(intent);
                }
        }
    }
    

    简而言之,一旦用户选择了一个选项,您需要做的就是翻转一个标志。如果该标志未翻转,则使下一个按钮的操作不执行任何操作。

    如果按钮不执行任何操作,将按钮设为灰色或以其他方式将其显示为禁用也是一个好主意,但我不会解释如何执行此操作,因为它超出了此问题的范围。

    祝你好运!

    【讨论】:

    • 你太棒了,非常感谢你的工作如此简单!你有没有机会私信我或在下面发布关于灰色按钮的信息?这真的会让它看起来更专业。
    • 如果你只是使用普通的 Android 按钮(看起来像你),你可以参考这个:stackoverflow.com/questions/4384890/… 如果你想改变按钮的样式,你必须附加额外的布局样式。请参阅以下答案:stackoverflow.com/questions/8743120/how-to-grey-out-a-button 看到您所问的内容已经在 SO 上回答了很多次,IMO 最好不要在此处发布类似问题的另一个答案。祝你的应用顺利完成!
    • 另外,如果您发现某个答案回答了您的问题,请确保接受它,因为这会让其他人知道该问题已得到解答。 (我也会得到一些代表;))
    猜你喜欢
    • 2019-04-07
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2016-09-25
    • 2011-11-12
    相关资源
    最近更新 更多