Insert CheckBox value into SQLite Android - android

I have this database-query:
public void checkBox(String fasil1,String fasil2,String fasil3,String fasil4,String fasil5,String fasil6,String fasil7,
String fasil8,String fasil9,String fasil10,String fasil11,String fasil12,String fasil13,String fasil14){
ContentValues cv = new ContentValues();
cv.put("fasil1", fasil1);
cv.put("fasil2", fasil2);
cv.put("fasil3", fasil3);
cv.put("fasil4", fasil4);
cv.put("fasil5", fasil5);
cv.put("fasil6", fasil6);
cv.put("fasil7", fasil7);
cv.put("fasil8", fasil8);
cv.put("fasil9", fasil9);
cv.put("fasil10", fasil10);
cv.put("fasil11", fasil11);
cv.put("fasil12", fasil12);
cv.put("fasil13", fasil13);
cv.put("fasil14", fasil14);
getWritableDatabase().insert("fasil", "name", cv);
}
and this is my CheckBox code:
fasil1 = (CheckBox)findViewById(R.id.rs);
fasil1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Rumah Sakit";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil2 = (CheckBox)findViewById(R.id.skul);
fasil2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Sekolah";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil3 = (CheckBox)findViewById(R.id.kampus);
fasil3.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Kampus";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil4 = (CheckBox)findViewById(R.id.officeBuild);
fasil4.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Office Building";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil5 = (CheckBox)findViewById(R.id.apartemen);
fasil5.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Apartemen";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil6 = (CheckBox)findViewById(R.id.hotel);
fasil6.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Hotel";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil7 = (CheckBox)findViewById(R.id.bank);
fasil7.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Bank";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil8 = (CheckBox)findViewById(R.id.spbu);
fasil8.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "SPBU";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil9 = (CheckBox)findViewById(R.id.pasar);
fasil9.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Pasar";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil10 = (CheckBox)findViewById(R.id.wisata);
fasil10.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Jalur Wisata / Tempat Wisata";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil11 = (CheckBox)findViewById(R.id.terminal);
fasil11.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Stasiun / Terminal";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil12 = (CheckBox)findViewById(R.id.bandara);
fasil12.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Bandara / Airport";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil13 = (CheckBox)findViewById(R.id.mol);
fasil13.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Mal / Shoping Center";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
fasil14 = (CheckBox)findViewById(R.id.hiburan);
fasil14.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
checked = "Entertainment";
Toast.makeText(CobaCombo.this, checked, Toast.LENGTH_SHORT).show();
}else{
checked = "-";
}
}
});
Then I have code to save values when button is clicked:
helper.checkBox(fasil1.getText().toString(), fasil2.getText().toString(), fasil3.getText().toString(),
fasil4.getText().toString(), fasil5.getText().toString(), fasil6.getText().toString(),
fasil7.getText().toString(), fasil8.getText().toString(), fasil9.getText().toString(),
fasil10.getText().toString(), fasil11.getText().toString(), fasil12.getText().toString(),
fasil13.getText().toString(), fasil14.getText().toString());
But it's not work...
I want to store values checked into the database when checked or unchecked. How I can do that?
Thank you.

1st issue:
You are assigning value to checked string variable on every checkbox checked, so at the end you will be having only 1 string value whether you have selected 2 checkbox or a single, Instead you should create String[] array for checked checkbox.
2nd issue:
On the button click, you are trying to call checkBox method of your database, here again you are just fetching a value of CheckBox caption, so it doesn't matter here whether checkbox is checked or unchecked.

if a checkbox is checked you can get the bool value (true or false) with value = checkbox.isChecked();
if it is true, save as a 1 in your db, if not save as a 0

Related

Android: How to uncheck checkbox without perform click on it?

I have 3 checkbox in my Layout:
(case #1) mCheckBoxAll: when is checked or unchecked, all other boxes are set in the same state.
(case #2) mCheckBoxChoice1 and mCheckBoxChoice2: if one of these is unchecked by the user then the mCheckBoxAll must be unchecked.
mCheckBoxAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckBoxChoice1.setChecked(isChecked);
mCheckBoxChoice2.setChecked(isChecked);
}
});
mCheckBoxChoice1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked)
mCheckBoxAll.setChecked(!isChecked);
}
});
mCheckBoxChoice2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked)
mCheckBoxAll.setChecked(!isChecked);
}
});
But this code doesn't work in case #2. All cases are unchecked in the same time...
I would put all your checkboxes that should change at once in a RadioGroup, and when mCheckBoxAll is checked iterate over RadioGroup and select / deselect them all
case 1
final RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
for (int i = 0; i < radioGroup.getChildCount(); i++){
((RadioButton) radioGroup.getChildAt(i)).setChecked(isChecked);
}
case 2 - you could call this method, to determine if one of the buttons is unchecked (call inside your 2 buttons onCheckedChanged). If it returns false, deselecte the main RadioButton.
private boolean isButtonUnchecked() {
for (int i = 0; i < radioGroup.getChildCount(); i++){
RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);
if (!radioButton.isChecked()) {
return false;
}
}
return true;
}
When you checkbox2 is unchecked then you set the state of checkboxall to be unchecked, and there you call checkbox1 to be uncheck as well, here is your problem.
So if checkbox 1 and 2 are checked and then you unchecked checkbox2 it will affect checkbox1.
Edit:
You should identify the source of the unchecked in checkboxall, if it comes from one of the two checkbox or if it comes from the uncheck all.
The easiest solution is to declare a global variable in your activity/fragment which tells you if you comes from checkboxes 1 and 2.
And if your checkboxall listener uncheck 1 and 2 only if the value is true.
Don't forget to change its value when you are done to false.
Edited code:
modify your code to
mListener = new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckBoxChoice1.setChecked(isChecked);
}
};
mCheckBoxAll.setOnCheckedChangeListener(mListener);
mCheckBoxChoice1.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked){
mCheckBoxAll.setOnCheckedChangeListener(null);
mCheckBoxAll.setChecked(!isChecked);
mCheckBoxAll.setOnCheckedChangeListener(mListener)
}
}
});
mCheckBoxChoice2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked){
mCheckBoxAll.setOnCheckedChangeListener(null);
mCheckBoxAll.setChecked(!isChecked);
mCheckBoxAll.setOnCheckedChangeListener(mListener)
}
}
});
use below code and it will work your scenario
int mCheckBoxAll_clicktimes=0;
int mCheckBoxChoice2_clicktimes=0;
int mCheckBoxChoice1_clicktimes=0;
mCheckBoxAll.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
mCheckBoxChoice1.setChecked(false);
mCheckBoxAll.setChecked(false);
mCheckBoxChoice2.setChecked(false);
mCheckBoxAll_clicktimes++;
mCheckBoxChoice2_clicktimes=0;
mCheckBoxChoice1_clicktimes=0;
if(mCheckBoxAll_clicktimes%2 !=0 || mCheckBoxAll_clicktimes==0){
//-----when mcheckbox all checked
mCheckBoxAll.setChecked(true);
mCheckBoxChoice1.setChecked(true);
mCheckBoxChoice2.setChecked(true);
}else{
//===when mcheckboxall unchecked
mCheckBoxChoice1.setChecked(false);
mCheckBoxAll.setChecked(false);
mCheckBoxChoice2.setChecked(false);
}
}
});
mCheckBoxChoice1.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
mCheckBoxChoice1.setChecked(false);
mCheckBoxAll.setChecked(false);
mCheckBoxChoice2.setChecked(false);
mCheckBoxAll_clicktimes=0;
mCheckBoxChoice2_clicktimes=0;
mCheckBoxChoice1_clicktimes++;
if(mCheckBoxChoice1_clicktimes%2 !=0 || mCheckBoxChoice1_clicktimes==0){
//when mCheckBoxChoice1 checked
mCheckBoxChoice1.setChecked(true);
}else{
//====when mCheckBoxChoice1 unchecked
mCheckBoxChoice1.setChecked(false);
mCheckBoxAll.setChecked(false);
}
}
});
mCheckBoxChoice2.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
mCheckBoxChoice1.setChecked(false);
mCheckBoxAll.setChecked(false);
mCheckBoxChoice2.setChecked(false);
mCheckBoxAll_clicktimes=0;
mCheckBoxChoice2_clicktimes++;
mCheckBoxChoice1_clicktimes=0;
if(mCheckBoxChoice2_clicktimes%2 !=0 || mCheckBoxChoice2_clicktimes==0){
//when mCheckBoxChoice2 checked
mCheckBoxChoice2.setChecked(true);
}else{
//when mCheckBoxChoice2 unchecked
mCheckBoxChoice2.setChecked(false);
mCheckBoxAll.setChecked(false);
}
}
});

Overriding setOnCheckedChangeListener in Android

I have a set of switch components, around 30. I want to override the setOnCheckedChangeListener so that I can avoid unnecessary code that does nearly the same thing.
I know, it is possible for onClick function, so using multiple buttons and changing the logic in the overridden function is way better.
What I have so far is:
final Switch question1 = (Switch) findViewById(R.id.question1);
question1.setText(R.string.no);
question1.setChecked(false);
question1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question1.setText(R.string.yes);
} else {
question1.setText(R.string.no);
}
UpdateScores();
}
});
final Switch question2 = (Switch) findViewById(R.id.question2);
question2.setText(R.string.no);
question2.setChecked(false);
question2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question2.setText(R.string.yes);
} else {
question2.setText(R.string.no);
}
UpdateScores();
}
});
As can be seen much of the code is replicated and I don't want that. Is there any way to achive this?
You can create one listener for all your switchers.
CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
And then add this listener to your Switchers:
question1.setOnCheckedChangeListener(listener);
question2.setOnCheckedChangeListener(listener);
....
question30.setOnCheckedChangeListener(listener);
OnCheckedChangeListner onchange = new OnCheckedChangeListener(){
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
}
question2.setOnCheckedChangeListener(onchange);
you want it?

How to access String Created in an inner class

I've been doing a lot of research about this and I can't find an answer I can implement...
So I hope one of you can help me :)
Here is my problem: I create the String "dispo" in depending on how the switch is set, but I can't use this in my URL below...
(I tried to declare the String as final but it won't work...
Here is the code:
Switch toto = (Switch) findViewById(R.id.toto);
toto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(isChecked){
String dispo = "yes";
}else{
String dispo = "no";
}
}
});
new RequestTask().execute("http:myURL" + dispo);
}
Thank you :)
You have to move the new RequestTask().execute("http:myURL" + dispo);inside the onCheckedChanged method.
Just create the the String 'dispo' before the listener. In your solution the String 'dispo' is only known/valid in the if/else statement (within the braces).
String dispo = null;
toto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
dispo = "yes";
} else {
dispo = "no";
}
}
});
new RequestTask().execute("http:myURL" + dispo);
Thanks to all for your help.
I figured-out a way to do what I wanted^^
Here is the code:
Switch toto = (Switch) findViewById(R.id.toto);
toto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {}
});
//check the current state and call the URL accordingly
if (toto.isChecked()) {
new RequestTask().execute("http:myURL/script.php&dispo=yes");
} else {
new RequestTask().execute("http:myURL/script.php&dispo=no");
}
}

Check if Any Checkbox is Checked

I have checkboxes for week days in my android application , and I want to put a listener to check if any one of these checkboxes is checked but my way seems hard , isn't there a way to gather all these listeners into one
sun.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
mon.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
tue.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
wed.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
thu.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
fri.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
sat.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{ if ( isChecked )
{
count=count+1;
// perform logic
}
else
{
count=count-1;
}
}});
You can check the id of the buttonView that is being triggered and do the proper validation, all you have to do is assign the same onCheckListener to the checkboxes and do something as show below:
private OnCheckedChangeListener checkedListener = new OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch(buttonView.getId()){
case R.id.checkId1:
//TODO: Code for checked one...
break;
case R.id.checkId2:
//TODO: Code for checked two...
break;
}
}
};
Hope it Helps!
Regards!
If you have similar logic that you haven't provided here, you can create a list of checkboxes and create listeners for them in a cycle, for example.
Let your activity implement the OnCheckedChangeListener and then you have the onCheckChanged...
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.sun:
break;
case R.id.mon:
break;
default:
break;
}
}
there is; implements View.OnClickListener with his method in your class
#Override
public void onClick(View v) {
switch (v.getId()){
case R.id.checbox1:
if(checkbo1.isCheck){
//do logic then dont forget to set to the opposite state
checkbox.setChecked(false);
}
else{
//do logic
checkbox.setChecked(true);
}
break;
//
case R.id.checbox2:
//do logic etc...
break;
}
}
then use a switch case deal between different click event from user
hope it help
Of course there is a simpler way. Just make your Activity where you are doing this implement OnCheckedChangeListener
public Class MyActivity extends Activity implements OnCheckedChangeListener{
//your activity logic in here
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//your Activity will now receive onCheckedChangeEvents here from
//the checkboxes to which you assign it as a listener
}
}
, in onCreate, after you get references to all of your day checkboxes, set the Activity as the listener like this
#Override
public void onCreate(Bundle savedInstanceState){
//first get references to all your checkboxes and assign them to mon, tue, wed etc.
//then set the listeners
mon.setOnCheckedChangeListener(this);
tue.setOnCheckedChangeListener(this);
wed.setOnCheckedChangeListener(this);
thu.setOnCheckedChangeListener(this);
fri.setOnCheckedChangeListener(this);
sat.setOnCheckedChangeListener(this);
sun.setOnCheckedChangeListener(this);
}
, make sure all of your checkboxes have IDs assigned to them in the layout xml, like this
<CheckBox
android:id="#+id/checkMonday"
....
, then you will have one onCheckedChange method where you can handle the different days like this
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id = buttonView.getId();
if(isChecked){
counter++; //a day has been checked
}else{
counter--; //a day has been unchecked
}
switch(id){
case R.id.checkMonday:
//logic for Monday
break;
case R.id.checkTuesday:
//logic for Tuesday
break;
...
}
}
That should do the trick!

How to verify that a checkbox is just about to be unchecked?

In Android, is this code rith to verify that the checkbox is clicked to be unchecked ?
public void onClick(View v) {
if (((CheckBox) v).isChecked()) {
Toast.makeText(IdentifyActivity.this, "clicked to check", Toast.LENGTH_LONG);
}
else{
Toast.makeText(IdentifyActivity.this, "clicked to uncheck", Toast.LENGTH_LONG);
}
you can use OnCheckedChangeListener. you have to implement the callback
onCheckedChanged(CompoundButton buttonView, boolean isChecked)
that's the way your task is usualy done. Your code works as well and, probably, between both approces there is not a real difference
CheckBox cb = (CheckBox) findViewById(R.id.myCheckBox);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
#Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// It's checked
} else {
// It's not checked
}
}
});
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
#Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(isChecked==true)
{
//your checkbox is checked
}
else
{
//your checkbox is not checked
}
}
}

Categories

Resources