У меня есть диалог, который содержит несколько флажков. Когда диалоговое окно создано, поля должны быть инициализированы как отмеченные / не отмеченные в соответствии с состоянием назначенных логических переменных. Проверка переменных проходит нормально, но когда я использую CheckBox.setChecked (true / false), приложение вылетает.
После небольшого исследования и игры я заметил, что переменная Widget, которую я использую, чтобы указать на флажок, не инициализируется, хотя я понятия не имею, почему. Я связываю его с соответствующим идентификатором, но он, похоже, не прилипает. Даже пошагово просматривая код, сразу после моего вызова findViewbyId () переменная отображается как ноль. Понятия не имею почему.
(хотя есть 5 флажков, я собираюсь показать код только для одного, поскольку все они функционально идентичны)
MatrixActionActivity.java
public class MatrixActionActivity extends AppCompatActivity {
...
private CheckBox mHotSimCheck, mPublicCheck, mNoiseCheck, mDiffGridCheck, mSilentCheck;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actions);
mHotSimCheck = (CheckBox)findViewById(R.id.checkbox_hotsim); // <-- mHotSimCheck registers as null even after this statement
//This button opens preferences dialog
mPrefsButt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MatrixActionActivity.this);
LayoutInflater inflater = MatrixActionActivity.this.getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.dialog_matrix_action_modifiers, null);
dialogBuilder.setView(dialogView);
final MyDeck deck = MyDeck.getInstance();
if(deck.isDiveDPActive) {
Toast.makeText(MatrixActionActivity.this, "deck.isDiveDPActive = true.", Toast.LENGTH_SHORT).show(); // <-- shows fine when next statement is removed
mHotSimCheck.setChecked(true); // <-- Causes crash
}else{
mHotSimCheck.setChecked(false);
}
dialogBuilder.setTitle("Dice Pool Modifier Preferences");
dialogBuilder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//nada
}
});
dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//nada
}
});
AlertDialog b = dialogBuilder.create();
b.show();
}
});
dialog_matrix_action_modifiers.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
...
<CheckBox
android:id="@+id/checkbox_hotsim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:text="+2 while in hot sim"
android:onClick="onCheckboxClicked"/>
</LinearLayout>
...