我在主要活动中放置了一个切换小部件,我还有第二个扩展BroadcastReceiver的活动。我想在第二个活动中获得switch小部件的布尔状态。
如果我输入
Switch s = (Switch) findViewById(R.id.switch1);
它表示对于SecondActivity类型未定义findViewById。问题是Android不允许我在扩展广播接收器的类中获得switch的值。
我想知道开关的状态,即开关是打开还是关闭,但是在第二个活动中。我怎样才能实现它?
答案 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);
}
}