Java 无法在Android中调用MainActivity的方法
我有一个首选项的经典示例,我想调用Java 无法在Android中调用MainActivity的方法,java,android,Java,Android,我有一个首选项的经典示例,我想调用MainActivity方法来隐藏ImageView But it does not go to debug even. 那么如何正确调用MainActivity的方法呢 public class SettingsActivity extends AppCompatPreferenceActivity ... @Override public void onSharedPreferenceChanged(SharedPreferences
MainActivity
方法来隐藏ImageView
But it does not go to debug even.
那么如何正确调用MainActivity
的方法呢
public class SettingsActivity extends AppCompatPreferenceActivity
...
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
try {
if (key.equals("isGPS_Switch")) {
Boolean isGPSSwitch = sharedPreferences.getBoolean(key, false);
if (isGPSSwitch) {
// START SERVICE
getActivity().startService(new Intent(getActivity(), gpsService.class));
((MainActivity)getActivity()).MyLocationMapDisplay(true);
} else {
// STOP SERVICE
getActivity().stopService(new Intent(getActivity(), gpsService.class));
((MainActivity)getActivity()).MyLocationMapDisplay(false);
}
}
} catch (Exception ex) {
Log.e("Preferences", ex.getMessage());
}
}
和主要活动类
public class MainActivity extends AppCompatActivity
...
private ImageView imageDisplayGPS;
public void MyLocationMapDisplay(boolean isDisplay)
{
if(isDisplay)
{
imageDisplayGPS.setVisibility(View.VISIBLE);
}
else
{
imageDisplayGPS.setVisibility(View.GONE);
}
}
没有什么比使用广播接收器更简单的了
private void configureBroadcastReciver() {
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent i)
{
try
{
String imageDisplayGPSState = (String) i.getExtras().get("btn_imageDisplayGPS");
if(imageDisplayGPSState.equals("true"))
{
MyLocationMapDisplay(true);
}
else
{
MyLocationMapDisplay(false);
}
}
catch (Exception ex)
{
Log.d("MAIN ACTIVITY", ex.getMessage());
}
}
};
registerReceiver(broadcastReceiver, new IntentFilter("buttons_visible"));
}
在首选项中是
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
try {
if (key.equals("isGPS_Switch")) {
Boolean isGPSSwitch = sharedPreferences.getBoolean(key, false);
if (isGPSSwitch) {
// START SERVICE
getActivity().startService(new Intent(getActivity(), gpsService.class));
Intent buttons_visible = new Intent("buttons_visible");
buttons_visible.putExtra("btn_imageDisplayGPS", "true");
getContext().sendBroadcast(buttons_visible);
} else {
// STOP SERVICE
getActivity().stopService(new Intent(getActivity(), gpsService.class));
Intent buttons_visible = new Intent("buttons_visible");
buttons_visible.putExtra("btn_imageDisplayGPS", "false");
getContext().sendBroadcast(buttons_visible);
}
}
} catch (Exception ex) {
Log.e("Preferences", ex.getMessage());
}
}
}
在Android中,从一个活动引用另一个活动不是一个好主意。他们有独立的生命周期,试图从另一个生命周期中获取一个生命周期会带来各种各样的麻烦。@Henry Ok。请您提供正确的解决方案,好吗?即使^这不是真的,也最好避免像那样将代码耦合在一起。@chieftwoils很棒!请提供正确的解决方案。谢谢一种方法是检查
MainActivity
中的首选项设置,以决定是否显示UI。