Android:在不单击 UI 按钮的情况下按 Id 查找 View

标签 android android-layout checkbox view

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/

相关文章:

android - 如何将 Recyclerview 项目保持在同一位置?

android - Proguard 在 java.lang.StringBuilder 中找不到方法

android - 如何减少 Android xml 布局中文本周围的填充?

javascript - 在 html 复选框后面运行一个 Action

c# - MonoDroid SurfaceView

android - 使用 SimpleDateFormat 和 UmmalquraCalendar 在阿拉伯语中显示日期名称时得到空字符串

android - 设置 RelativeLayout 子项以填充未使用的空间

android - 向下滚动时隐藏顶部栏

php - 复选框对数据库的值(value)

javascript - 检查复选框是否被选中,返回 addEventListener 不是一个函数