如何在Android中获得切换值?

时间:2014-10-31 13:53:31

标签: android

我在主要活动中放置了一个切换小部件,我还有第二个扩展BroadcastReceiver的活动。我想在第二个活动中获得switch小部件的布尔状态。

如果我输入

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

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

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

3 个答案:

答案 0 :(得分:18)

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

根据您的应用设计,您可以使用以下方法之一:

1)通过额外的意图将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);

答案 1 :(得分:5)

要访问交换机的值,您需要执行以下操作:

((Switch) findViewById(R.id.switch_id)).isChecked();
BroadcastReceiver 的上下文中

BUT ,您无法真正访问布局,因此无法访问交换机。 您必须在活动中执行此操作,该活动会扩展具有切换功能的布局。

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

答案 2 :(得分:0)

您可以将值保存在“首选项”中。 下面的课程将让您轻松保存数据并从首选项

中进行检索
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);
    }

}