Android编程新手,请耐心等待。
我正在尝试打开设置活动(使用“共享首选项”),并使用Checkboxes
填充设置活动,根据主要活动中的当前设置设置或不设置。
只要我在设置活动用户界面上放置一个按钮,调用该方法即可显示Checkboxes
的状态,我已设法让它正常工作。
如果我尝试从onCreate
方法自动调用“settingsLoadSavedSettings”方法,它将不允许我传递(View view)
参数,如果没有参数,应用程序崩溃一旦它尝试运行.isChecked(true)
代码行,我认为因为它没有参数而无法通过Id找到Checkbox
。
如果我注释了.isChecked(true)
行,只要共享偏好正在更新,程序就会正常工作,如果我点击复选框,主应用活动会正确响应,但{ {1}}无论启动时的主要应用设置如何,都会在设置界面上显示所有未选中状态。
我让它正常工作,除了我必须在活动加载后单击我的设置UI上的“显示当前设置”按钮以显示复选框的当前状态。我想在活动屏幕打开后立即自动填充Checkboxes状态。
我在Checkboxes
方法中保留了已注释的调用,但我无法将onCreate
视图作为参数放入,而不会出现错误“无法解析符号'视图'”。再次, settingsLoadSavedSettings 方法在设置活动UI上的按钮调用时有效,并且在我尝试打开设置活动时没有View视图参数时应用程序崩溃。
非常感谢您提供的任何帮助。我希望这是一个简单的例子,我不理解面向对象编程并产生一个骨头错误。我已经尝试过搜索这个问题,但我认为问题非常普遍,我的搜索字词给了我很多答案
代码部分:
View
使用onCreate中的方法调用激活设置活动时的错误日志:
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);
}
}
答案 0 :(得分:0)
你这样做比你需要查找更加困难PreferenceActivity,这会为你做这件事。
答案 1 :(得分:0)
想出来。
问题是我在onCreate完成之前调用.setChecked方法导致空指针错误。通过将方法调用添加到新的onStart函数,现在可以设置复选框。
@Override
protected void onStart(){
super.onStart();
settingsLoadSavedSettings();
}