2016-06-13 188 views
1

我想發送一個listeneradapterfragment。由於android建議不要使用構造函數,我通過setArguments()發送監聽器。實現一個擴展Parcelable的接口

我無法正確地聽取implement這位聽衆。

這是mycode的

監聽器:

public interface DiscoverFragmentListener extends Parcelable{ 

    void onSwitchToNextFragment(); 
} 

實現:

public final class DiscoverpageListener implements DiscoverFragmentListener { 
      @Override 
      public void onSwitchToNextFragment() { 
       mFragmentManager.beginTransaction().remove(mFragmentAtPos0) 
         .commit(); 
       if (mFragmentAtPos0 instanceof DummySectionFragment) { 
        Button_Description frag = new Button_Description(); 
        Bundle basket = new Bundle(); 
        basket.putParcelable("listener",listener); 
        frag.setArguments(basket); 
        mFragmentAtPos0 = frag; 
       } else { // Instance of NextFragment 
        DummySectionFragment frag = new DummySectionFragment(); 
        Bundle basket = new Bundle(); 
        basket.putParcelable("listener",listener); 
        frag.setArguments(basket); 
        mFragmentAtPos0 = frag; 
       } 
       notifyDataSetChanged(); 
      } 

      @Override 
      public int describeContents() { 
       return 0; 
      } 

      @Override 
      public void writeToParcel(Parcel dest, int flags) { 

      } 
     } 

DummySectionFragment:

public static class DummySectionFragment extends Fragment{ 



     private DiscoverFragmentListener discoverFragmentListener; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.discover_fragment, container, false); 

      discoverFragmentListener = getArguments().getParcelable("listener"); 
return rootView; 

我得到這個錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference 

幫我出去!

謝謝!

+1

在片段上調用setter方法,提供偵聽器。你不能讓偵聽器成爲'Parcelable'。或者,更好的辦法是從'onAttach()'中的活動中拉取聽衆。 – CommonsWare

+0

如果你沒有數據,那麼爲什麼要使用Parcelable。當你在對象中有一些數據並且你想序列化它(傳遞給下一個活動或片段)時,使用Parcelable。 – Neo

回答

0

給你一個更好的主意: Parcelable就像Serializable一樣。

這意味着當你想傳遞一個包含一些狀態的自定義對象時,你需要使它成爲Parcelable。

在這裏,你正試圖實現別的東西。你只是想設置一個回調。 正如評論中所建議的那樣,您可以使用setCallback/onAttach方法來實現此目的。

+0

在這種情況下,我必須在viewpager適配器內部實現DiscoverFragmentListener。所以我想知道我應該如何在片段中調用它。 –

+0

您在這裏有多個選項。如果你想要更好的設計,那麼你可以考慮使用事件總線。請點擊此鏈接:http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html但是,你只需要完成這些工作,在switchToMainFragment函數中保留主要活動中的片段參考。 –

+0

謝謝。我通過調用適配器解決了它,然後它是我的片段中的方法。 –

相關問題