2017-11-09 5 views
0

私はあなたが持っているので、ImageViewのを拡張するクラスAを、している:あなたが持っているので、それから私は、Aのためのメタデータを格納し、活動の間で前後に送られるMetaClassAを、持っているこの内部オブジェクト/内部クラスの状況をどのようにエレガントに解決しますか?

public class A extends imageView {...} 

public class MetaClassA implement Parcelable{...} 

MetaClassAを持っていることのポイントは、クラスAのデータを実際に送信することなく、クラスAのデータを収集して転送することです。

今、私は少しジレンマに実行しているよ:

public A a = new A(); 
i.putExtra("type" a.getType()); 

:私は、効率的であることはできるだけ痛みのないよう全力を尽くすしたい参照、私はできるだけ頻繁このを使用したいですとして代わりの可能性:

... 
Type type = a.getType(); 
i.putExtra("type" type); 

ので、私のジレンマがある、私はどちらかA.put MetaClassAがクラスAの内側にネストすることができますように、クラス、またはBIは、私たちは、単純にすることができます計画私が選ぶべき

  1. :A.

    内部変数/オブジェクトだから私の質問として、それを電子?

  2. 私が計画Aに行く場合、クラスAが構築されるたびに入れ子クラスのMetaClassAが構築されると仮定できますか?

  3. もし私がプランBに行くなら、クラスAが構築されるたびにMetaClassAオブジェクトが構築されることをどうすれば保証できますか?それはimageViewを継承していて、ちょっとしたコンストラクタがないからです。

ありがとうございました! ORDER BY

答えて

0

  1. これは意見ベースであり、SOにすべきではありません。どちらのクラスでも、Parcelableのポイントが欠落しています。これは、あなたが望むもののためのインターフェイスであり、クラスからParcelを作成します。その全体のポイントはクラスそのものが自分自身のパーセルを作る方法を知っているからです。オブジェクト自体を送信するのではなく、オブジェクトはメッセージを作成する方法を知っています(同じオブジェクトを構築するために使用できます)。
  2. いいえ。クラスをインスタンス化する必要があります(クラスメソッドのみのクラスが必要な場合を除き、ここでは必要と思われません)。どこに置いても問題ありません。原則として、クラス自体のオブジェクトだけで必要なクラスは、入れ子になるのに適していますが、以下を読んでください。
  3. これをAオブジェクトのフィールドとして保存し、Aコンストラクタで作成できます。私はこの計画全体に反対している。

あなたの質問に答えた後、Parcelableの例を確認することをお勧めします。他にも好きなものは次のとおりです:http://www.developerphil.com/parcelable-vs-serializable/、開発者Phil

Parcelableクラスが別のクラスに含まれている例があります。これはあなたが必要なものよりも複雑であることに注意してください - あなただけのクラスAでParcelableを実装する必要があり、特に@override

void writeToParcel(Parcel dest, int flags) 
int describeContents() 
static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>() 

フルたとえばリンクを参照してください。これはむしろ客観的に答えることができるので(私は願っています)、あなたの質問に答えましたが、「何が良いのか」という質問は避けてください。まったく問題がない場合は、「スピード/効率/ベストプラクティスのメリット」を使用してください。それでも、それは意見に基づくと考えられます。

+0

"オブジェクト自体は送信しませんが、オブジェクトは送信オブジェクトを作成する方法を知っています。"私は完全にあなたが意味するものを得る。しかし、私はApache-phpの組み合わせを実行しているサーバーにデータを送る必要があり、私はこのMetaDataClassを回避する方法がありません。どのような場合でもAクラスから必要なデータを抽出し、MetaDataClass型オブジェクトを含むコンテナに格納する必要があります。私がそれが文脈上功績を残していることに気が付かなかったために、以前のことを明らかにしてくれなかったことに有益なデータだけでなく、Aを保管しようとするのは賢明ではありません。 – VictorCharlie23

+0

@ VictorCharlie23十分に公正な場合、おそらくParcelableはあなたが意味する/必要とさえしていないものでもあります。この場合、しばしば使用されるメソッドは、Aオブジェクトからインスタンス化できる「メッセージ」オブジェクトを作成することです。フィールドをコピーする可能性があります(私は実際に送信するときだけ提案します)。 Stringデータを送信したい場合は、ここでJSONがあなたの友人になります。また、AはJSONに直列化できるはずです。 – kabanus

+0

ああ、私はサーバーと通信してデータを処理するために専用のこのサービスを持っていますが、意図の部分をスキップすることはできません。 1つのアクティビティでデータを処理してから送信するだけではなく、それを送信することができます。このサービスは、そのサービスと通信するいくつかのアクティビティを処理する必要があります。また、私はまだJSONではないが、私は間違いなくそれについて考えるだろう。 – VictorCharlie23

関連する問題