1

ユーザーが広告を削除したい場合は、アプリの有料版を購入する必要があることをユーザーに通知するために、Javaアラートでダイアログを表示する必要があります...私は2つのJavaファイルを作成しました..および上記を思い出すダイアログと呼ばれる別のファイルレイアウトxmlで定義されたファイルおよびその他の要素...問題は、新しいダイアログ(これ)を配置するとエラーが発生することです...代わりに、現在チェックボックスをクリックしてアプリを実行している場合、アプリがクラッシュします。クラッシュ後のチェックボックスが存在することを確認しました ... チェックボックスはチェック可能であってはなりません

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;
            }});

    }
4

1 に答える 1

1

ビルダー変数を使用する前に初期化する必要があります。したがって、コンテキストも関数に渡すようにしてください。最初に次のように宣言します。

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

そして、次のように呼び出します。

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

完全な作業例:

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;
            }
        });
    }
}
于 2013-06-28T20:35:57.070 に答える