无法在Android中调用Main Activity的方法



我有一个经典的示例首选项我想调用 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());
            }
        }

和MainActivity类

public class MainActivity extends AppCompatActivity 
...
 private ImageView imageDisplayGPS;
 public void MyLocationMapDisplay(boolean isDisplay)
    {
        if(isDisplay)
        {
            imageDisplayGPS.setVisibility(View.VISIBLE);
        }
        else
        {
            imageDisplayGPS.setVisibility(View.GONE);
        }
    }

没有什么比使用 broadcastreciver

简单简单
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());
            }
        }
    }

最新更新