У меня есть PreferenceActivity, в котором есть предпочтение. Я бы хотел, чтобы щелчок на этом Preference открыл диалоговое окно, представленное в другом классе. Класс Яркость содержит диалоговое окно для рендеринга. Это код.ShowDialog onClick Preference
// This is the PreferenceActivity Class (Settings)
Preference bright;
bright = (Preference) this.findPreference("bri");
bright.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Brightness brightness = new Brightness();
brightness.ShowDialog();
return true;
}
});
Brighness класс
public class Brightness extends Activity{
private SeekBar brightbar;
private int brightness;
@SuppressWarnings("unused")
private ContentResolver cResolver;
private Window window;
TextView txtPerc;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShowDialog();
}
public void ShowDialog() {
final AlertDialog.Builder popDialog = new AlertDialog.Builder(getApplicationContext());
final LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
final View Viewlayout = inflater.inflate(R.layout.dialog_brightness, (ViewGroup) findViewById(R.id.layout_dialog));
popDialog.setTitle("Set Brightness");
popDialog.setView(Viewlayout);
brightbar = (SeekBar) findViewById(R.id.brightbar);
txtPerc = (TextView) findViewById(R.id.txtPercentage);
cResolver = getContentResolver();
window = getWindow();
brightbar.setMax(255);
brightbar.setKeyProgressIncrement(1);
brightbar = (SeekBar) findViewById(R.id.brightbar);
txtPerc = (TextView) findViewById(R.id.txtPercentage);
cResolver = getContentResolver();
window = getWindow();
brightbar.setMax(255);
brightbar.setKeyProgressIncrement(1);
try
{
brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
float perc = (brightness /(float)255)*100;
txtPerc.setText((int)perc +" %");
}
catch (SettingNotFoundException e)
{
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
brightbar.setProgress(brightness);
brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onStopTrackingTouch(SeekBar seekBar)
{
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = brightness/(float)255;
window.setAttributes(layoutpars);
}
public void onStartTrackingTouch(SeekBar seekBar)
{
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
brightness = progress;
float perc = (brightness /(float)255)*100;
txtPerc.setText((int)perc +" %");
}
});
popDialog.setNeutralButton("Close",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
popDialog.create();
popDialog.show();
}
}
Проблема заключается в том, что, когда я нажимаю на этом предпочтении краш-приложение! Это LogCat
11-11 18: 03: 57,788: Е/AndroidRuntime (18672): неустранимый: Основной 11-11 18: 03: 57,788: Е/AndroidRuntime (18672): Java. lang.NullPointerException 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.content.ContextWrapper.getApplicationContext (ContextWrapper.java:109) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at com.packagename.Brightness.ShowDialog (Brightness.java:39) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at com.packagename.Settings $ 1.onPreferenceClick (Settings.java : 48) 11-11 18: 03: 57.788: E/Androi dRuntime (18672): at android.preference.Preference.performClick (Preference.java:952) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.preference.PreferenceScreen.onItemClick (PreferenceScreen. java: 215) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.widget.AdapterView.performItemClick (AdapterView.java:297) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.widget.AbsListView.performItemClick (AbsListView.java:1100) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.widget.AbsListView $ PerformClick.run (AbsListView .java: 2788) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.widget.AbsListView $ 1.run (AbsListView.java : 3463) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.os.Handler.handleCallback (Handler.java:730) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.os.Handler.dispatchMessage (Handler.java:92) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.os.Looper.loop (Looper.java: 137) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at android.app.ActivityThread.main (ActivityThread.java:5289) 11-11 18: 03: 57.788: E/AndroidRuntime (18672)): at java.lang.reflect.Method.invokeNative (родной метод) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at java.lang.reflect.Method.invoke (Method.java: 525) 11-11 18: 03: 57,78 8: E/AndroidRuntime (18672): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:739) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:555) 11-11 18: 03: 57.788: E/AndroidRuntime (18672): at dalvik.system.NativeStart.main (родной метод)
Если вы хотите начать работу, вы должны использовать startActivity (новый Intent (это, Brightness.class)), а не показывать диалог. – Aleksandr
передать текущий контекст активности в 'AlertDialog.Builder (Brightness.this);' вместо приложения –
проверить эту страницу http://developer.android.com/guide/topics/ui/settings.html – Aleksandr