2017-09-04 37 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

的活動中,它表示回調未初始化。 –