John Smoother
John Smoother

Reputation: 61

Checkbox and AlerDialog

I have to bring up a dialog in java alert to inform the user if he wants to remove the ads have to buy the paid version of the app ... I did two java files .. and another one called dialogue from which recall the above file and other elements defined in a layout xml ... the problem is that if I put new Dialog (this) gives me error ... instead if currently run the app by clicking on the checkbox crashes the app.The checkbox following the crash has checked that there should be ... the checkbox must not be checkable.

package com.X.XX.XXX;


import android.app.AlertDialog;
import android.content.Context;

public class Dialogo {

    public static final int BUY = 1000;
    AlertDialog.Builder builder;

    public void mostra(int Id) {
        // TODO Auto-generated method stub
        switch(Id)
        {
        case BUY:
            builder.setTitle("Title");
            builder.setMessage("TEXT ");
            builder.setNegativeButton("CLOSE", null);
            builder.setPositiveButton("BUY", null);
            break;
        }
        builder.create().show();
    }

}

package com.X.XX;

import com.X.XX.XXX.Dialog;

import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class Settings extends PreferenceActivity{

    CheckBoxPreference no_ads;
    Dialogo dialogo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.addPreferencesFromResource(R.xml.settings);
        dialogo = new Dialogo(); 

        no_ads = (CheckBoxPreference) this.findPreference("no_ads");
        no_ads.setOnPreferenceClickListener(new OnPreferenceClickListener(){

            @Override
            public boolean onPreferenceClick(Preference preference) {
                // TODO Auto-generated method stub
                dialogo.mostra(Dialogo.BUY);
                ((CheckBoxPreference)preference).setChecked(false);
                return false;
            }});

    }

Upvotes: 1

Views: 127

Answers (1)

woot
woot

Reputation: 3731

You have to initialize your builder variable before using it. So make sure to pass context as well to your function, first declare it like this:

public void mostra(Context context, int Id) {
    builder = new AlertDialog.Builder(context);

And then call it like this:

dialogo.mostra(Settings.this, Dialogo.BUY);

Complete working example:

package com.X.XX.XXX;

import android.app.AlertDialog;
import android.content.Context;

public class Dialogo {
    public static final int BUY = 1000;

    public void mostra(Context context, int Id) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        // TODO Auto-generated method stub
        switch(Id)
        {
        case BUY:
            builder.setTitle("Title");
            builder.setMessage("TEXT ");
            builder.setNegativeButton("CLOSE", null);
            builder.setPositiveButton("BUY", null);
            break;
        }
        builder.create().show();
    }
}


package com.X.XX;
import com.X.XX.XXX.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class Settings extends PreferenceActivity{
    CheckBoxPreference no_ads;
    Dialogo dialogo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.addPreferencesFromResource(R.xml.settings);
        dialogo = new Dialogo(); 

        no_ads = (CheckBoxPreference) this.findPreference("no_ads");
        no_ads.setOnPreferenceClickListener(new OnPreferenceClickListener(){
            @Override
            public boolean onPreferenceClick(Preference preference) {
                // TODO Auto-generated method stub
                dialogo.mostra(Settings.this, Dialogo.BUY);
                ((CheckBoxPreference)preference).setChecked(false);
                return false;
            }
        });
    }
}

Upvotes: 1

Related Questions