【问题标题】:if and else command in android preferencesandroid首选项中的if和else命令
【发布时间】:2011-06-03 09:15:12
【问题描述】:

几周以来,我一直在尝试为我的应用添加一些偏好

我真的只需要复选框功能。

我正在尝试通过选中复选框来控制单个单选按钮的可见性

这是我的 Preferences.java

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.Preference.OnPreferenceChangeListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.view.View;


public class Preferences extends PreferenceActivity {

private RadioButton btn01;


@Override
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       addPreferencesFromResource(R.xml.prefs);
       btn01 = (RadioButton)findViewById(R.id.RadioButton01);

       Preference customPref = (Preference) findPreference("customPref");

                      customPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){

                          public boolean onPreferenceClick(Preference preference) {
                          Toast.makeText(getBaseContext(),
                                                      "The Custom Preference Has Been Clicked",
                                                      Toast.LENGTH_LONG).show();
                          SharedPreferences customSharedPreference = getSharedPreferences(
                                           "myCutomSharedPrefs", Activity.MODE_PRIVATE);
                          SharedPreferences.Editor editor = customSharedPreference
                                           .edit();
                          editor.putString("myCustomPref",
                                           "The preference has been clicked");
                          editor.commit();
                          return true;}

                          public void CheckBox() {

                          final CheckBox ThisCheckBox = (CheckBox) findViewById (R.id.checkboxPref);{   
                          ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

                              public boolean OnCheckedChange (CompoundButton compoundButton) {
                          if (ThisCheckBox.isChecked()){ 

                          {
                          btn01.setVisibility(0);
                          }{

                          btn01.setVisibility(2);

                          }}                                    
}                            


;
});


};}});}}

无论如何,我很确定这是完全错误的,我在这一行得到一个错误

ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

知道为什么吗?我认为这与我调用上述行的方式有关,但无论我使用 final、boolean 还是 void,它仍然会产生错误

这是错误信息

类型 new CompoundButton.OnCheckedChangeListener(){} 必须实现继承的抽象方法 CompoundButton.OnCheckedChangeListener.onCheckedChanged(CompoundButton, boolean)

所以我猜我要问的是

我的偏好设置是否正确 以及如何正确执行 If else 命令?

【问题讨论】:

  • 你应该让你的变量名以小写开头。大写名称通常用于表示类。
  • 对不起,你能帮我指出来吗

标签: android checkbox if-statement android-preferences


【解决方案1】:

我认为您尝试覆盖的方法的签名不正确。替换这个:

public boolean OnCheckedChange (CompoundButton compoundButton) {

用这个:

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

编辑 好的,这是修复整个班级的尝试。备份您当前的代码,然后选择下面的所有代码,然后复制它。选择类中的所有代码并将其替换为:

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class Preferences extends PreferenceActivity {

    private RadioButton btn01;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        btn01 = (RadioButton)findViewById(R.id.RadioButton01);
        Preference customPref = (Preference) findPreference("customPref");

        customPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){

            public boolean onPreferenceClick(Preference preference) {
                Toast.makeText(getBaseContext(),"The Custom Preference Has Been Clicked",Toast.LENGTH_LONG).show();
                SharedPreferences customSharedPreference = getSharedPreferences("myCutomSharedPrefs", Activity.MODE_PRIVATE);
                SharedPreferences.Editor editor = customSharedPreference.edit();
                editor.putString("myCustomPref","The preference has been clicked");
                editor.commit();
                return true;
            }

            public void CheckBox() {
                final CheckBox ThisCheckBox = (CheckBox) findViewById (R.id.checkboxPref);
                ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
                    @Override
                    public void onCheckedChanged(CompoundButton compoundButton,boolean test) {
                        if (ThisCheckBox.isChecked()){ 
                            btn01.setVisibility(0);
                        } else {
                            btn01.setVisibility(2);
                        }
                    }
                });
            };
        });
    }
}

上面的代码在eclipse中编译没有问题

【讨论】:

  • 谢谢你=P 一个有用的提示,但我提到的那行仍然有一个错误,有人有什么想法吗=/
  • 这一行>> ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() abd the error is>> The type new CompoundButton.OnCheckedChangeListener(){} 必须实现继承的抽象方法 CompoundButton.OnCheckedChangeListener.onCheckedChanged(复合按钮,布尔值)
  • 它在我的 IDE 中运行良好。您是否复制并粘贴了我提供的行或您是否在适当位置编辑了代码?三个变化是: 1:将返回类型从boolean 更改为void。 2:将方法名称从OnCheckedChange更改为onCheckedChanged(注意“d”)和3:添加boolean参数。
  • 不,我得到了所有这些,但错误似乎仍然存在=/突出显示的代码特别是上述行括号中的部分,我现在完全不知所措。我一遍又一遍地检查拼写和语法,但我仍然一无所获。我想知道 Eclipse IDE 是否包含自己的错误,或者我的应用程序文件结构是否错误。我是否需要导入 onCheckedChange 而不是 onCheckedChange?
  • 如果您使用的是 eclipse,那么您可以将鼠标悬停在错误上,它会弹出一个小消息。它应该有一个链接,上面写着Add unimplemented method 或类似名称。点击它,eclipse应该为你添加正确的方法。
【解决方案2】:

使用内置的 CheckBoxPreference 类并查看这篇关于设置和使用首选项的文章:

http://www.kaloer.com/android-preferences

使用上面的代码,其中有几个错误(除了已经识别的错误),即您的 if/else 语句缺少“else”并且大括号似乎不匹配(假设将代码粘贴到还没有搞砸) - 这似乎可以编译:

import android.app.Activity;

导入 android.content.SharedPreferences; 导入android.os.Bundle; 导入 android.preference.CheckBoxPreference; 导入 android.preference.Preference; 导入android.preference.PreferenceActivity; 导入 android.preference.PreferenceManager; 导入 android.preference.Preference.OnPreferenceClickListener; 导入 android.preference.Preference.OnPreferenceChangeListener; 导入android.widget.Button; 导入 android.widget.CheckBox; 导入 android.widget.CompoundButton; 导入 android.widget.RadioButton; 导入 android.widget.Toast; 导入 android.widget.CompoundButton.OnCheckedChangeListener; 导入android.view.View;

公共类首选项扩展了 PreferenceActivity { 私人 RadioButton btn01;

@Override
protected void onCreate(Bundle savedInstanceState)
{
       super.onCreate(savedInstanceState);
       addPreferencesFromResource(R.xml.prefs);
       btn01 = (RadioButton)findViewById(R.id.RadioButton01);

       Preference customPref = (Preference) findPreference("customPref");

      customPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
      {
          @Override
          public boolean onPreferenceChange(Preference preference, Object object)
          {
              Toast.makeText(getBaseContext(), "The Custom Preference Has Been Clicked", Toast.LENGTH_LONG).show();
              SharedPreferences customSharedPreference = getSharedPreferences("myCutomSharedPrefs", Activity.MODE_PRIVATE);
              SharedPreferences.Editor editor = customSharedPreference.edit();
              editor.putString("myCustomPref", "The preference has been clicked");
              editor.commit();
              return true;
          }
      });
}

  public void CheckBox()
  {

      final CheckBox ThisCheckBox = (CheckBox) findViewById (R.id.checkboxPref);

      ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
      { 
          //@Override
          public void onCheckedChanged (CompoundButton compoundButton, boolean isChecked)
          {
              if (ThisCheckBox.isChecked())
              {
                  btn01.setVisibility(0);           
              }
              else
              {
                 btn01.setVisibility(2);

              }                                    
         }
      });
  } 

}

【讨论】:

  • 你知道我之前可能应该提到过这一点,但那是我用来入门的教程 =/ 抱歉。所以我不使用复合按钮,而是使用 CheckBoxPreference 对吗?
  • 谢谢您刚刚更改了我的代码,它看起来更有希望了,但我仍然在同一行上遇到该错误>类型 new Preference.OnPreferenceChangeListener(){} 必须实现继承的抽象方法 Preference。 OnPreferenceChangeListener.onPreferenceChange(Preference, Object)
  • 我不知道你是怎么修改代码的,但一定不要误会 onPreferenceClick(Preference preference) 和 onPreferenceChange(Preference preference) ,它们有不同的含义
  • 查看我上面编辑的代码 - 出于某种原因,粘贴将一些导入语句和类的开头与其余代码分开。
  • 嗯,谢谢你的代码修改,但还是有错误在线>> ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 错误信息状态>> 任何线索?我开始认为这是eclipse的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2015-12-02
  • 2021-04-24
  • 2014-04-24
  • 2014-09-12
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多