2013-06-28 55 views
1

我必須提出一個對話框在java警報通知用戶,如果他想刪除廣告必須購買付費版本的應用程序...我做了兩個java文件..另一個叫對話,從中回憶上述文件和佈局xml中定義的其他元素...問題是,如果我把新的對話框(這個)給了我錯誤......相反,如果當前通過點擊複選框運行應用程序崩潰應用程序。崩潰後的複選框已檢查應該有...複選框不得是可檢查。複選框和AlerDialog

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

    } 
+0

請發佈您的logcat。 –

+0

這是logcat,對不起... https://www.dropbox.com/s/53tbfexplqqe36k/crash.txt –

回答

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

繼續給我錯誤在這裏\t \t dialogo.mostra(PreferenceActivity.this,Dialogo.BUY);說「範圍內沒有可以訪問類型優先級活動的封閉實例」我在第一個java文件中放入了您發佈的代碼的一部分,並在第二個調用中放入。我瘋了:-( –

+0

我編輯了我的答案,第二部分專門 - 現在試試。 – woot

+0

非常好...謝謝你的朋友...在那一行不再報錯,但現在有一個錯誤這裏dialogo.mostra(Dialogo.BUY);:: - S –