2017-12-26 12 views
0

MainActivityのタブ付きのビューを含み、各タブごとに異なるフラグメントをホストするアプリケーションがあります。このメカニズムは、FragmentPageAdapterを拡張するSectionPageAdapterを通じて機能します。私は画像をクリックすると何かをシリアル化しないときにシリアル化可能なオブジェクトを書き込むことができます。

タブの一つはGeneralSearchFragment

public class GeneralSearchFragment extends Fragment { 

public GeneralSearchFragment(){ 

} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
    final ConstraintLayout constraintLayout = (ConstraintLayout) inflater.inflate(R.layout.fragment_searchtab, container, false); 


    ((ImageView)constraintLayout.findViewById(R.id.searchByName)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setClass(getActivity(), FreeSearchActivity.class); 
      startActivity(intent); 
     } 
    }); 

    return constraintLayout; 
} 

}

を引き出し、私のコードは、他のさまざまな活動を開始する必要があります。私のコードではアクティビティに何も渡さないので、シリアライズエラーがどこから来ているのか分かりません。私が何かをシリアル化する唯一の時間は、アイテムのリストをフラグメントのトラフに渡すときです。しかし、ここで起こっていることとはどのようにつながっていますか?

おかげでたくさん

はところで私はここでそれをシリアル化しようとして実際にあった場合logcatが指摘された問題を理解しています。私はそのオブジェクトをシリアル化する唯一の時間(実際にはdrawableを含む)は別の断片にあり、うまく動作します。それは私にエラーを与えない。 に対応するフラグメントを返す

/** * A {@link FragmentPagerAdapter} *セクション/タブのいずれか/:描画可能でところでリソース

Logcat

12-26 08:17:52.853 5129-5129/com.chronocrops.chronocropps E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.chronocrops.chronocropps, PID: 5129 
                     java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.chronocrops.chronocropps.Model.Crop) 
                      at android.os.Parcel.writeSerializable(Parcel.java:1822) 
                      at android.os.Parcel.writeValue(Parcel.java:1770) 
                      at android.os.Parcel.writeList(Parcel.java:926) 
                      at android.os.Parcel.writeValue(Parcel.java:1719) 
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
                      at android.os.Bundle.writeToParcel(Bundle.java:1232) 
                      at android.os.Parcel.writeBundle(Parcel.java:878) 
                      at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:157) 
                      at android.os.Parcel.writeTypedArray(Parcel.java:1462) 
                      at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:617) 
                      at android.os.Parcel.writeParcelable(Parcel.java:1791) 
                      at android.os.Parcel.writeValue(Parcel.java:1697) 
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
                      at android.os.Bundle.writeToParcel(Bundle.java:1232) 
                      at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604) 
                      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934) 
                      at android.os.Handler.handleCallback(Handler.java:790) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
                     Caused by: java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable 
                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1233) 
                      at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597) 
                      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558) 
                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481) 
                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227) 
                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
                      at android.os.Parcel.writeSerializable(Parcel.java:1817) 
                      at android.os.Parcel.writeValue(Parcel.java:1770)  
                      at android.os.Parcel.writeList(Parcel.java:926)  
                      at android.os.Parcel.writeValue(Parcel.java:1719)  
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)  
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)  
                      at android.os.Bundle.writeToParcel(Bundle.java:1232)  
                      at android.os.Parcel.writeBundle(Parcel.java:878)  
                      at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:157)  
                      at android.os.Parcel.writeTypedArray(Parcel.java:1462)  
                      at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:617)  
                      at android.os.Parcel.writeParcelable(Parcel.java:1791)  
                      at android.os.Parcel.writeValue(Parcel.java:1697)  
                      at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)  
                      at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)  
                      at android.os.Bundle.writeToParcel(Bundle.java:1232)  
                      at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604)  
                      at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934)  
                      at android.os.Handler.handleCallback(Handler.java:790)  
                      at android.os.Handler.dispatchMessage(Handler.java:99)  
                      at android.os.Looper.loop(Looper.java:164)  
                      at android.app.ActivityThread.main(ActivityThread.java:6494)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)  

EDITから来ていますページ。だから私はこの問題に対する答えを持って

Crop abacaxi = new Crop("Harvest begins in 10th of June", 
       getResources().getDrawable(R.drawable.abacax1), 
       "Marvila", 
       "Ananas comosus"); 

クロップオブジェクト

public class Crop implements Serializable { 

    private String specieHarvest; 
    private Drawable specieImage; 
    private String specieLocation; 
    private String specieName; 

    public Crop(String specieHarvest, Drawable specieImage, String specieLocation, String specieName) { 
     this.specieHarvest = specieHarvest; 
     this.specieImage = specieImage; 
     this.specieLocation = specieLocation; 
     this.specieName = specieName; 
    } 

    public String getSpecieHarvest() { 
     return specieHarvest; 
    } 

    public Drawable getSpecieImage() { 
     return specieImage; 
    } 

    public String getSpecieLocation() { 
     return specieLocation; 
    } 

    public String getSpecieName() { 
     return specieName; 
    } 
} 

答えて

0

: */ パブリッククラスSectionsPagerAdapterはFragmentPagerAdapter {

public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    // Mudar o retorno do getItem de acordo com a position 
    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     if(position == 0){ 
      return new CalendarFragment(); 
     }else if(position == 1){ 
      Bundle bundle = new Bundle(); 
      bundle.putSerializable("crops",crops); 
      CropListFragment cropListFragment = new CropListFragment(); 
      cropListFragment.setArguments(bundle); 
      return cropListFragment; 
     }else if(position == 2){ 
      return new GeneralSearchFragment(); 
     } 
     // Should'nt reach here 
     return null; 
    } 

クロップの例を拡張します。

Why is it possible to pass a Drawable trough a Bundle from one Activity to a Fragment?

答えは、簡単ですそれはMarshledされることはありませんFragmentの引数としてオブジェクトを渡すときのように:この答えはこの記事に与えられた回答に拠点を持っています。これは、Fragmentが破壊されない限り、シリアル化/逆シリアル化されないことを意味します。この場合、彼は新しいActivityを開始しようとすると破壊されます。私はFragmentの中に何かエラーが出ていなかったので、Fragmentがあったので、私は同じオブジェクト(参照)自体を扱っていたことはほとんど分かりませんでした。

関連する問題