Как понять, какую радиогруппу не проверить? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть RecyclerView, в котором 60 элементов, а в RadioGroup есть 2 RadioButton ... и у меня есть Fab button, затем, нажав на него, Snack bar показывает, что у вас нет разрешения перейти на следующую страницупотому что вы проверили все 60 радио группы.Я устанавливаю действие в Снэк-баре, чем Понимаю, что RadioGroup не проверено ... и меняется TextColor Снять отметку radio group.Как это исправить?

Метод, который проверяет, все ли проверки RadioButton

//Select All Radio Group
  public boolean allSelected() {
    boolean allChecked = true;
    for (Question question : questionList) {
      allChecked = question.getSelectedId() != 0;


    }
    return allChecked;
  }

нажмите на потрясающую кнопку

public void onResultClick(View view) {

      if (allSelected()) {
        startActivity(new Intent(MbtiQuestionActivity.this, ResultActivity.class));

      } else {
        snackbar =
          Snackbar.make(coordinator, R.string.check_all_ques_err, Snackbar.LENGTH_SHORT)

            .setAction(R.string.snack_find_unchecked_ques, new View.OnClickListener() {
              @Override
              public void onClick(View view) {

//here should right the code that uncheck radio group

              }
            });

        ViewCompat.setLayoutDirection(snackbar.getView(), ViewCompat.LAYOUT_DIRECTION_RTL);
        snackbar.show();
      }
    }

Класс вопроса

public class Question extends BaseQuestion {

  private String questTitle;   private String firstQuest;   private String secondQuest;   private int score = 0;   private int firstQuestScore = 2;   private int secondQuestScore = 3;


  private int selectedId;


  public Question(String questTitle, String firstQuest, String secondQuest) {
    this.questTitle = questTitle;
    this.firstQuest = firstQuest;
    this.secondQuest = secondQuest;

  }

  public Question(){

  }


  public String getQuestTitle() {
    return questTitle;   }

  public void setQuestTitle(String questTitle) {
    this.questTitle = questTitle;   }

  public String getFirstQuest() {
    return firstQuest;   }

  public void setFirstQuest(String firstQuest) {
    this.firstQuest = firstQuest;   }

  public String getSecondQuest() {
    return secondQuest;   }

  public void setSecondQuest(String secondQuest) {
    this.secondQuest = secondQuest;   }


  public int getScore() {
    return score;   }

  public void setScore(int questNum, int questScore) {
    this.score = ((questNum * questScore) + questNum);   }


  public int getFirstQuestScore() {
    return firstQuestScore;   }

  public void setFirstQuestScore(int firstQuestScore) {
    this.firstQuestScore = firstQuestScore;   }

  public int getSecondQuestScore() {
    return secondQuestScore;   }

  public void setSecondQuestScore(int secondQuestScore) {
    this.secondQuestScore = secondQuestScore;   }


  public void mathScore(int questNum, int questScore) {   }

  public int getSelectedId() {
    return selectedId;   }

  public void setSelectedId(int selectedId) {
    this.selectedId = selectedId;   }


}

Потрясающе в xml

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:src="@drawable/check_outline"
        app:fabSize="normal"
        android:onClick="@{handlers::onResultClick}"
        android:clickable="true"
        android:focusable="true"/>

, и я использую DataBinding ... спасибо.

Нажмите «بررسی» и фон TextColor или CardView будет изменен! (Радиогруппа не проверена!)

enter image description here

ошибка журнала:

 Process: mbtitest.kiars.me.mbti, PID: 19757
    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
        at mbtitest.kiars.me.mbti.databinding.QuesItemRowBinding.executeBindings(QuesItemRowBinding.java:196)
        at android.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:437)
        at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:409)
        at android.databinding.ViewDataBinding$7.run(ViewDataBinding.java:194)
        at android.databinding.ViewDataBinding$8.doFrame(ViewDataBinding.java:286)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
        at android.view.Choreographer.doCallbacks(Choreographer.java:676)
        at android.view.Choreographer.doFrame(Choreographer.java:603)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:859)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:168)
        at android.app.ActivityThread.main(ActivityThread.java:5885)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

1 Ответ

0 голосов
/ 18 сентября 2018

row.xml

<data>

    <variable
        name="model"
        type="com.innovanathinklabs.sample.data.TestViewModel"/>

</data>

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:cardBackgroundColor="@{question.selected ? @color/colorAccent : @android:color/transparent}"
    />

Model.java

import com.yourpackage.BR;
public class Question extends BaseObservable {
    private boolean selected;

    @Bindable
    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
        notifyPropertyChanged(BR.selected);
    }
}

Показать фон

public void setErrorBackground() {
    for (Question question : questionList) {
        question.setSelected(question.getSelectedId() != 0);
    }
}

    Snackbar.make(coordinator, R.string.check_all_ques_err, Snackbar.LENGTH_SHORT)

        .setAction(R.string.snack_find_unchecked_ques, new View.OnClickListener() {
          @Override
          public void onClick(View view) {
           setErrorBackground(); //call this
          }
        });

Чтобы удалить фон ошибки, вызывайте этот метод из любого места

public void removeErrorBackground() {
    for (Question question : questionList) {
        question.setSelected(false);
    }
}

Обновление

Если вы хотите удалить фон после пользовательских проверок, сделайте это

app:cardBackgroundColor="@{model.selected &amp;&amp; model.selectedId == 0  ? @color/colorAccent : @android:color/transparent}"

здесь &amp;&amp; означает &&

Обновление 2

Удалить выбранное поле.

public class Question extends BaseObservable {
    private boolean showErrorBackground;

    @Bindable
    public boolean isShowErrorBackground() {
        return showErrorBackground;
    }

    public void setShowErrorBackground(boolean showErrorBackground) {
        this.showErrorBackground = showErrorBackground;
        notifyPropertyChanged(BR.selected);
    }
}

в макете

    app:cardBackgroundColor="@{model.showErrorBackground &amp;&amp; model.selectedId == 0  ? @color/colorAccent : @android:color/transparent}"

в занятии

private void showHideErrorBackground(boolean show) {
    for (Question question : list) {
        question.setShowErrorBackground(show);
    }
    adapter.notifyDataSetChanged();
}

в клике SnakeBar

showHideErrorBackground(true);

Обновление

public class Question extends BaseObservable {
    private boolean showErrorBackground;
    private int selectedId;

    @Bindable
    public boolean isShowErrorBackground() {
        return showErrorBackground;
    }

    public void setShowErrorBackground(boolean showErrorBackground) {
        this.showErrorBackground = showErrorBackground;
        notifyPropertyChanged(BR.selected);
    }

    @Bindable
    public int getSelectedId() {
        return selectedId;
    }

    public void setSelectedId(int selectedId) {
        this.selectedId = selectedId;
        notifyPropertyChanged(BR.selectedId);
    }
}

Мы должны сделать selectedId связываемым, потому что мы хотим вызывать его использование при его изменении.

...