Android:通过Id查找视图而不点击UI按钮

时间:2014-02-18 06:13:08

标签: android android-layout checkbox view

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

}

2 个答案:

答案 0 :(得分:0)

你这样做比你需要查找更加困难PreferenceActivity,这会为你做这件事。

答案 1 :(得分:0)

想出来。

问题是我在onCreate完成之前调用.setChecked方法导致空指针错误。通过将方法调用添加到新的onStart函数,现在可以设置复选框。

@Override
    protected void onStart(){
    super.onStart();
    settingsLoadSavedSettings();
}