【问题标题】:How to get switch value in Android?如何在Android中获得开关值?
【发布时间】:2014-12-27 20:58:00
【问题描述】:

我在 Main Activity 中放置了一个开关小部件,我还有一个扩展 BroadcastReceiver 的第二个 Activity。我想在第二个活动中获取开关小部件的布尔状态。

如果我输入

Switch s = (Switch) findViewById(R.id.switch1);

它说对于 SecondActivity 类型的 findViewById 是未定义的。问题是 Android 不允许我在扩展广播接收器的类中获取 switch 的值。

我想知道开关的状态,即开关是打开还是关闭,但在第二个活动中。我怎样才能实现它?

【问题讨论】:

  • @IsabelHM 我已经告诉过 Android 无法识别扩展广播接收器的类中的 findViewById。我读过那个问题,那是完全不同的。
  • 你的 BroadcastReceiver 没有 UI(因此没有开关),所以它不会让你 findViewById() 是有道理的。

标签: android


【解决方案1】:

从 Activity 调用 findViewById() 只能访问属于该 Activity 布局一部分的视图。您不能使用它来搜索任何其他 Activity 的布局。

根据您的应用设计,您可以使用以下其中一种:

1) 通过 Intent extra 将 Switch 的值发送给 SecondActivity

活动中:

Intent mIntent = new Intent(this, SecondActivity.class);
mIntent.putExtra("switch", s.isChecked());
startActivity(mIntent);

在 SecondActivity:

boolean isChecked = getIntent().getBooleanExtra("switch", false);

2) 将值保存到更改首选项中,并在 SecondActivity 中读取首选项

活动中:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor e = settings.edit();
e.putBoolean("switch", s.isChecked());
e.commit();

在 SecondActivity:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
boolean isChecked = settings.getBoolean("switch", false);

【讨论】:

  • 如何将布尔值添加到首选项并在 SecondActivity 中检索。可以发一下代码吗?
  • 我在 SecondActivity 中遇到错误。这是错误:-“PreferenceManager 类型中的方法 getDefaultSharedPreferences(Context) 不适用于参数 (SecondActivity)”。
  • 实际上我正在创建一个在开关打开时阻止来电的应用程序。我发布了一个带有完整代码的问题。请看一下:-stackoverflow.com/questions/26673533/…
  • 我认为"SecondActivity" 是一个活动。你只需要一个上下文,而不是this,你可以使用context(从onReceive方法传入)。
【解决方案2】:

要访问开关的值,您需要执行以下操作:

((Switch) findViewById(R.id.switch_id)).isChecked();

但是在 BroadcastReceiver 的上下文中,您无法真正访问布局,因此您无法访问开关。 您只能在 Activity 中执行此操作,该 Activity 会扩展具有 Switch 的布局。

您可能在 Activity 中以编程方式注册了 BroadcastReceiver,这是我看到这种混合概念起作用的唯一方式。

【讨论】:

    【解决方案3】:

    您可以将值保存在首选项中。 下面的课程将使您轻松保存数据并从首选项中检索它

    public class SessionManager {
    
        private SharedPreferences pref;
        private static SessionManager sessionManager;
    
    
    
    
        public static SessionManager getInstance(Context context) {
            if(sessionManager == null){
                sessionManager = new SessionManager(context);
            }
            return sessionManager;
        }
    
    
        public SessionManager(Context context) {
            String PREF_NAME = context.getResources().getString(R.string.app_name);
            this.pref = context.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);
    
        }
    
    
        /**
         * Getting value for key from shared Preferences
         *
         * @param key          key for which we need to get Value
         * @param defaultValue default value to be returned if key is not exits
         * @return It will return value of key if exist and defaultValue otherwise
         */
        public String getValueFromKey(String key, String defaultValue) {
            if (pref.containsKey(key)) {
                return pref.getString(key, defaultValue);
            } else {
                return defaultValue;
            }
        }
    
    
        /**
         * Setting value for key from shared Preferences
         *
         * @param key   key for which we need to get Value
         * @param value value for the key
         */
        public void setValueFromKey(String key, String value) {
            pref.putString(key, value).apply();
        }
    
    
        /**
         * Setting value for key from shared Preferences
         *
         * @param key   key for which we need to get Value
         * @param value value for the key
         */
        public void setFlagFromKey(String key, boolean value) {
            pref.putBoolean(key, value).apply();
        }
    
    
        /**
         * To get Flag from sharedPreferences
         *
         * @param key key of flag to get
         * @return flag value for key if exist. false if not key not exist.
         */
        public boolean getFlagFromKey(String key) {
            return pref.containsKey(key) && pref.getBoolean(key, false);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多