我试图通过为我玩的棋盘游戏制作一个帮助程序来学习Android开发.我遇到了与Pass custom object between activities中回答的情况非常相似的情况.我的情况不同之处在于所讨论的自定义对象都在扩展抽象类.
抽象类代表一个芯片(与智能卡游戏相媲美),如下:
import java.util.ArrayList;public abstract class Chip{ protected String name; protected int imageID; protected ArrayList<String> chipcolors; protected ArrayList<String> chipTypes; public String toString(){ return name; } //Getters public String getname(){ return name; } public int getimageID() { return imageID; } public String getSet() { return set; } //figure out how I need to deal with colors/types when I get there}
扩展Chip的类的示例:
public class ChipA extends Chip{ public ChipA (){ super(); name = "Chip A"; imageID = R.drawable.chipa; set = "Basic"; chipTypes = new ArrayList<String>(); chipTypes.add("typeA"); chipcolors = new ArrayList<String>(); chipcolors.add("red"); chipcolors.add("green"); }}
我正在采用这种方法,以便我可以通过调用我需要的新ChipA()来创建适当类型的新芯片,而不是新芯片(<描述芯片A>的长参数列表).我需要将这些芯片的集合从一个活动传递到另一个活动.我已经在我的代码中通过存储我想要传递的Chips来解决这个问题,如this article所述,但文章的结尾建议使用intent extras来代替这种 *** 作.有人可以更清楚地解释原因吗?这只是惯例吗?如果只是一个可读性问题,这种方法似乎相对紧凑和可读.
通过阅读,很明显,使用Intent附加功能在活动之间传递任意类的目的是让它们实现Parcelable.但是,由于我正在使用该类的许多子类,这意味着将writetoParcel和Parcelable.Creator添加到每个子类. (describeContents()似乎并不重要,据我所知,我可以在基本的抽象类中实现它.)我可能会在这里有很多子类,这意味着添加了大量的重复代码.在这种情况下,实现Parcelable仍然被认为是首选方法吗?我错过了一些可以减少冗余代码的东西吗?如果可能的话,我宁愿保持我的芯片子类相当紧凑.
请保持温和,我是Stack Overflow和AndroID开发的新手.
解决方法:
你没有遗漏任何东西,Parcelable是这样做的首选方式.
我同意它会导致一些样板代码,但这是处理这个问题的干净方法.
可以通过扩展Application类来跳过这一点,但这会导致一些复杂的问题:在某些情况下可以删除Application对象,这将导致非常麻烦的错误.以预期的方式处理此方法更容易,并为您正在移动的每个对象创建构造函数(Parcel).
另一点是,单身人士模式本身受到越来越多的批评.我不会详细介绍,这些讨论涵盖了这个主题:
https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what
What is so bad about singletons?
更糟糕的是,在AndroID中,你甚至不能依靠真正的单身人士;您没有任何保险,您正在 *** 作的应用程序对象(或您自己创建的Singleton)将在应用程序的生命周期内保持其状态. (随机参考号:http://portabledroid.wordpress.com/2012/05/04/singletons-in-android/)
因此,请不要使用Singleton作为避免编写几个包裹的方法.它会回来后再咬你的屁股.
编辑:这里是一个很好的解释如何重现可怕的应用程序类崩溃:http://www.developerphil.com/dont-store-data-in-the-application-object/
总结以上是内存溢出为你收集整理的java – 在活动之间传递扩展抽象类的对象全部内容,希望文章能够帮你解决java – 在活动之间传递扩展抽象类的对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)