Android编程新手,请多多包涵。
我正在尝试打开一个设置 Activity (使用共享首选项)并使用根据主要 Activity 中的当前设置设置或未设置的复选框
填充它。
只要我在 Settings Activity UI 上放置一个按钮,调用该方法来显示 Checkboxes
当前的状态,我就设法让它工作是。
如果我尝试从 onCreate
方法自动调用 "settingsLoadSavedSettings" 方法,它不会让我传递 (View view)
参数,如果没有参数,应用程序会在尝试运行 .isChecked(true)
代码行时立即崩溃,我认为是因为它找不到 Checkbox
通过 Id 不带参数。
如果我注释掉 .isChecked(true)
行,只要 Shared Preferenences 正在更新,程序就会正常工作,如果我单击复选框,但 Checkboxes
出现在设置 UI 上时,无论启动时主要应用程序设置如何,都未选中。
我让它正常工作,除了我必须在 Activity 加载后单击设置 UI 上的“显示当前设置”按钮以显示复选框的当前状态。我试图在 Activity 屏幕打开后立即自动填充复选框状态。
我在 onCreate
方法中留下了注释掉的调用,但我无法将 View
View 作为参数而没有错误 "Cannot resolve symbol 'view '". 同样,settingsLoadSavedSettings 方法在通过设置 Activity UI 上的按钮调用且没有 View View 参数时起作用,当我尝试打开设置 Activity 时应用程序崩溃。
非常感谢您提供的任何帮助。我希望这是我不理解面向对象编程并犯下愚蠢错误的简单案例。我曾尝试搜索此问题,但我认为这个问题非常普遍,以至于我的搜索字词为我提供了范围广泛的答案
部分代码:
public class SettingsActivity extends ActionBarActivity {
CheckBox AllowAddition, AllowSubtraction, AllowMultiplication, AllowDivision;
boolean settingAddition, settingSubtraction, settingMultipliation, settingDivision;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
//settingsLoadSavedSettings(View view);
}
public void settingsLoadSavedSettings(View view){
AllowAddition = (CheckBox) findViewById(R.id.allowAddition);
AllowSubtraction = (CheckBox) findViewById(R.id.allowSubtraction);
AllowMultiplication = (CheckBox) findViewById(R.id.allowMultiplication);
AllowDivision = (CheckBox) findViewById(R.id.allowDivision);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
settingAddition = sharedPreferences.getBoolean("Allow_Addition",true);
settingSubtraction = sharedPreferences.getBoolean("Allow_Subtraction",true);
settingMultipliation = sharedPreferences.getBoolean("Allow_Multiplication",true);
settingDivision = sharedPreferences.getBoolean("Allow_Division",true);
if (settingAddition){
AllowAddition.setChecked(true);
}
if (settingSubtraction){
AllowSubtraction.setChecked(true);
}
if (settingMultipliation){
AllowMultiplication.setChecked(true);
}
if (settingDivision){
AllowDivision.setChecked(true);
}
}
在 onCreate 中使用方法调用激活设置 Activity 时的错误日志:
02-18 20:55:13.916 24918-24918/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mathhelper/com.example.mathhelper.SettingsActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.access$700(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
最佳答案
你让这条路变得比它需要的更难-查找PreferenceActivity ,它会为你做这件事。
关于Android:在不单击 UI 按钮的情况下按 Id 查找 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845692/