2015-03-10 2 views
0

У меня есть два класса. Я пытаюсь изменить логическое значение в зависимости от того, щелкнет ли пользователь флажок. Затем, в зависимости от того, является ли это значение true/false (флажок был установлен или нет), я хочу отобразить определенный текст в текстовом виде. Вот класс MainActivity:Булево значение не устанавливается на onClickListener

public class BoiseActivity extends ActionBarActivity { 

CheckBox cb; 
public boolean isTrue; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_boise); 

    cb = (CheckBox) findViewById(R.id.boiseCheckBox); 

    cb.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      isTrue = true; 
     } 
    }); 

public boolean isTrue() { 
    if (isTrue == true) { 
     return true; 
    } 
    return false; 
} 

Вот новая активность, которая открывается, когда пользователь нажимает на кнопку «Отправить»:

public class BoiseResults extends BoiseActivity { 

TextView TV; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_boise_results); 

    TV = (TextView) findViewById(R.id.textView1); 

if (isTrue() == true) { 
     TV.setText("checkbox checked"); 
    } 
} 

Булево значение никогда не изменяется в классе BoiseActivity onCreate- > метод onClick. Может ли кто-нибудь увидеть, что здесь не так? Спасибо

+1

Вы знаете, разница между классами и экземплярами? – immibis

+0

Я ... должен ли я создать экземпляр класса BoiseActivity в классе BoiseResults? Я думал, что это не позволит мне получить доступ к значениям, которые были изменены в предыдущем действии ... – user3192682

+0

Посмотрите на некоторые руководства по передаче данных между действиями и самой Java. Что такое 'isTrue == true'? – Vikram

ответ

2

Помимо того, что было сказано о вас собирании книги на ООП (давайте, ребята, все началось где-то): isTrue экземпляра переменного вашей BoiseActivity будет присутствовать в этом дочернем класс BoiseResults, потому что он (BoiseResults) наследует isTrue от BoiseActivity, но это значение не будет установлено и поэтому интерпретируется как ложное, как указал Викрам.

Что нужно сделать, чтобы исправить это:

  • использование onCheckedChangeListener для CheckBox
  • передать логическое значение («если флажок был отмечен») на ваш второй Activity через Intent вы начинаете его с , ссылки о том, как это сделать, были даны в комментариях
  • спросите себя, если BoiseResults действительно нуждается в подклассе BoiseActivity (я не думаю, что это так, это просто еще один Activity)
  • избавиться от всех булевой беспредела, созданного с isTrue() метода, возвращающего значение вашей переменной isTrue
  • Переименовать BoiseResults в BoiseResultsActivity для ясности
2

Ваш метод onCreate {...} для BoiseActivity не является закрытым методом.

Вам не нужен метод isTrue(), поскольку он действительно возвращает значение isTrue, а isTrue уже является переменной открытого экземпляра. Независимо от этой детали вы должны изучить (Явные) намерения для передачи данных между видами деятельности: http://www.vogella.com/tutorials/AndroidIntent/article.html

1

Учитывайте использование OnCheckedChangeListener;

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // DO SOMETHING HERE WHEN CHECKED/UNCHECKED 
     } 
}); 

Вы можете проверить это проверяется ли не с помощью метода checkBox.isChecked().

Для вас также лучше избегать выполнения ненужных проверок по логическому значению;

public boolean isTrue() { 
    if (isTrue == true) { 
     return true; 
    } 
    return false; 
} 

Следующие достижения будут такими же;

public boolean isTrue(){ 
    return isTrue; 
} 

Что касается вашей BoiseResults деятельности, взгляните на намерениях, если вы собираетесь меняться от BoiseActivity деятельности к BoiseResults деятельности от вашего покориться и нужно передать данные BoiseResults.

Смежные вопросы