English 中文(简体)
简言之 - 如何避免活动之间的重复代码
原标题:Android - How to avoid duplicate code between activities

这是一个一般性问题,但我要具体举例说明你的情况。

我在一份申请书中进行了大量活动。 在所有活动中,都有一个“Facetathton”。 当你点击ton子时,就把你带到一个特定的Facebook网页。 我祝愿纽伦在每一页都有同样的做法。

Right now, in every single Activity, I create an onClickListener() for the Facebook button and make the intent and start the activity. It s the same code in every single Activity.

什么是起草这一法典并将其纳入多项活动的最佳途径? 是否有其他途径?

我知道的一种解决办法是,使一个基数<代码>/编码>的类别延伸到<条码>,然后所有活动都延伸到<条码>。 然后将我的<代码>onClickListener(代码>列入<编码>CustomActative。 不过,如果这是最佳办法,我肯定会是新做法。 我的一些活动已经扩展了其他习俗活动类别,从而扩大了更多的事物,可能给我带来迷惑。

<>>>>>

在这里宣传诽谤: 请允许我说,我走了继承之路,我建立了一些<条码>——“客户活动”,我希望我的活动继续下去。 <代码>CustomActivity将包含一部普通法典,我需要用于所有活动,包括但不限于Facebook纽芬兰功能。 当我需要从<条码>使用通用代码时,发生了什么事情,但在该具体活动中没有Facetaton?

最佳回答

共同基类也许是最佳办法。 (如果你的一些活动扩展活动和一些扩展活动分类(例如清单活动),那么这项工作就不太好。

另一种做法是建立一个单独的班级,符合你点击听众的逻辑。 这并没有消除所有重复守则——每项活动都需要即时和登记听众——但只需要一度在听众中写成的逻辑。

在这两种选择中,您可以考虑将android:onClick归于纽芬兰。 这样,你就不必登记一位被点击的听众;你才需要在每个活动中采用目标方法。 这对于基类办法特别有用。

<>>>>>

支持你走继承之路,希望有一个没有Faceta but子的活动。 如果您使用<代码>android:onClick 这样,你就不必在你的法典中做任何区别——因为没有纽伦将援引你的浮标方法,这种方法只会坐在那里做任何事情。 如果你在法典中安装了“OnClickListener”,那么,你在登记听众之前,就只需要测试一下子宫的存在(即:findViewById(没有返回<>null)。

问题回答

一般来说,一个共同的基类是NOT的最佳办法(尽管肯定是有效的)。

这使我(以及我知道的“植被”的每个业务处方案家)感到 gr,但你应该像你可能的那样,把继承作为稀有的。 你们每次都应问一下,是否别无选择。

发现一种办法是非常严格地采用“i-a”测试方法,如果你把基础活动称为“Facebook Activities”,你真的可以说每个儿童“是”Facebook活动? 不可原谅。 另外,如果你决定在Twitter上添加一些网页(而不是其他网页),你如何这样做?

继承不是完全消失! 一种伟大的解决办法可能是扩大控制,以启动你的面纱活动,把它称作一种面貌,它把你需要做的所有工作与面像联系起来。 现在,你可以在你想要的任何一页添加这一内容,简单地把它rag在一页上(Im prettyure android instruments,让我在棕榈板上添加新的成分)。 它不像延长你的活动类别那样“自由”,但从长远来看,它将给你造成多少压力。

你们可能赢得我的信任,现在,我们都需要从自己的经历中学习,只是牢记这一点,并利用这一经验来评价你们的法典。

- 编辑,评论答复

你可以把任何面对面的活动概括起来,你认为,你会把很多东西用在自己的班级上,至少这样,你才能在一班子中增加。

然而,在某个时候,你可以决定,我完全理解的是,它拖了太多的碎块。 当时,你们的团结行动组织使用像你所建议的那种抽象的基础活动,但我要说的是,它要明确处理面纱,而我却支持诸如面像(和可能是其他人)等行为,并按预期处理这些行为。 然后,如果你愿意的话,你可以告诉NOT,在特定的屏幕上添加面对面的行为,或者在Twitter上增加其中一些行为。

如果你想要“标准”功能,那么你就不得不做任何特殊的事情,如果你希望打上可以轻松的脸谱,你可以开始:

super(DISABLE_FACEBOOK_BEHAVIOR);

并且如果你想要也能够做到这样, 页: 1

super(DISABLE_FACEBOOK_BEHAVIOR, ENABLE_TWITTER_BEHAVIOR);

with a constructor like AbstractAction(BehaviorEnum... behaviors).

这更加灵活,而且你实际上可以说,如果你的活动——IS-A“行为支持活动”具有明确良知的话,每一活动都是如此。

It is, of course, a perfectly good approach to be less flexible at first and refactor into a pattern like this later when you need to, just be on the look-out for your inheritance model causing problems so you don t let it mess you up for too long before you fix it.

同样,扩大工作是欧佩组织的原则,因此我认为这不是一个拥有一个以上等级的问题。 我认为,你所想的解决办法是最好的。

绝对。 利用继承来获得某些可再利用性,正如你在欧佩组织所做的那样。 你发现,正如你所取得进展,你希望重新利用你的活动——比爱阵食堂更复杂——的花角越来越多,这样,你就有一个伟大的想法,即开始建设你可以继承的冰冰,即“超级”活动。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签