2017-09-04 35 views
0

我希望我的应用在用户切换设置中的切换后发出通知。设置页面是静态的,所以我不能在这里使用showNotification()。有没有办法建立这样的通知?showNotification()in static android

public static class MainPreferenceFragment extends PreferenceFragment { 
      @Override 
      public void onCreate(final Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       addPreferencesFromResource(R.xml.pref_main); 

       final SwitchPreference notiswitch = (SwitchPreference) findPreference(getString(R.string.settings_notification_key)); 
       notiswitch.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
        @Override 
        public boolean onPreferenceChange(Preference preference, Object newValue) { 
         if(!((Boolean) newValue)) {  //default false 
          Toast.makeText(getActivity(), "OFF", 
            Toast.LENGTH_SHORT).show(); 

         } else { 
          Toast.makeText(getActivity(), "ON", 
            Toast.LENGTH_SHORT).show(); 
          //TODO make notification 
          showNotification();//error here 

         } 
         return true; 
        } 
       }); 
      } 
} 

public void showNotification() { 
+0

您没有添加showNotification的代码。另外,请附上你的logcat。 – jonathanrz

+0

showNotification只是一个简单的通知。问题是第一个showNotification被加下红线,并表示它是非静态的,无法引用。 –

回答

3

看起来你取得其中包含showNotification()方法并作为主机为片段的活动类中MainPreferenceFragment为静态内部类。

我的建议是使用activity-fragment通信的传统方法 - 通过投射片段的主机活动到所需的接口并从中调用适当的方法。

例如:

创建单独的文件中一个新的接口:

public interface NotificationView{ 
    void showNotification(); 
} 

然后使该负责显示实现接口片段,并重写showNotification方法的活性。

之后添加到MainPreferenceFragment类的私人领域NotificationView callback;并以这种方式初始化:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if (activity instanceOf NotificationView){ 
     callback = (NotificationView) activity; 
    } 
} 

现在,你是能够调用callback.showNotification();从那里你需要你的片段中。但是在使用片段和其他活动的情况下,请不要忘记在使用之前检查null的回调。

希望它会帮助!

+0

先生,我想我现在即将成功,但callback.showNotification();有一个错误说,回调可能没有被初始化。 –

+0

确保您将片段添加到实现了NotificationView接口 –

+0

的活动中,它表示回调未初始化。 –