【问题标题】:Checkbox and AlerDialog复选框和警报对话框
【发布时间】:2013-06-26 14:10:24
【问题描述】:

我必须在 java 警报中弹出一个对话框,通知用户如果他想删除广告必须购买付费版本的应用程序......我做了两个 java 文件..另一个叫做 dialog 从哪个回想一下在布局 xml 中定义的上述文件和其他元素...问题是,如果我放置新 Dialog (this) 会给我错误...相反,如果当前通过单击复选框运行应用程序会使应用程序崩溃。崩溃后检查是否应该有...复选框不得选中。

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

    }

【问题讨论】:

标签: java android checkbox android-alertdialog


【解决方案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;
            }
        });
    }
}

【讨论】:

  • 在这里继续给我错误 dialogo.mostra(PreferenceActivity.this, Dialogo.BUY);说“在范围内无法访问类型偏好活动的封闭实例”我将您发布的代码部分放入第一个 java 文件中,然后在第二个中放入调用。我要疯了:-(
  • 我已经编辑了我的答案,特别是第二部分——现在试试。
  • 非常好...谢谢朋友...在该行不再报告错误但现在这里有一个错误 dialogo.mostra (Dialogo.BUY); :-S
  • 你修改了 mostra 方法的签名,每次调用都必须传递 Context,因此 dialogo.mostra(Dialogo.BUY) 无效。
  • 对不起,我试图按照你告诉我的那样传递上下文,但我得到了一个错误......我把 dialogo.mostra (Context) 除了这个我尝试了许多其他组合,但我总是出错...我的头撞了十多分钟..希望您能帮助我:-)谢谢
猜你喜欢
  • 2017-09-14
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2014-02-18
  • 2011-10-26
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多