0

私は Android アプリケーションを開発していますが、何をすべきか疑問があります。

Dog クラスのインスタンスがあります。このクラスには 2 つのプロパティisMaleId(および別のプロパティ) があります。

これら 2 つのプロパティを別のプロパティに渡すと、次のようになりますActivity

public void onAddClick(View view)
{
    if (mSelectedDog == null)
        // TODO: Show a message to indicate that or maybe, the button add could be disabled.
        ;
    else
    {
        Intent intent = new Intent(this, AddDogActivity.class);

        // Pass to AddDogActivity if we are going to add a male or female dog.
        Bundle b = new Bundle();
        // Pass dog's sex.
        b.putBoolean(Constants.ACT_ADD_DOG_IS_A_MALE, mSelectedDog.isMale());
        // Pass dog's id
        b.putInt(Constants.ACT_ADD_DOG_ID, mSelectedDog.getId());
        intent.putExtras(b);
        // TODO: Maybe it is better pass Dog instance instead of isMale and ID.

        startActivity(intent);  
    }
}

Dogで別のクラス オブジェクトをインスタンス化する必要がありますAddDogActivity

これらの 2 つのプロパティを渡すのと、に渡すのとでは、どちらが優れていmSelectedDogますAddDogActivityか?

4

3 に答える 3

1

私は合格だと思いますmSelectedDog-これは私にとって適切なカプセル化のようです. これが最終的にやりたいことではないでしょうか。Dog別のアクティビティでクラス オブジェクトを操作しますか?

What happens if there were more properties of Dog you needed? The solution of passing each property doesn't scale well for me.

于 2013-06-09T14:07:00.730 に答える
1

Dog クラスが Serializable を実装するようにします。それだけです。次に、これを行うことができます:

intent.putExtra("selected_dog",mSelectedDog);

そして、フラグメントを使用して、この方法で取得できます。

getArguments.getSerializable("selected_dog");

アクティビティは次のとおりです。

getIntent().getExtras().getSerializable("selected_dog");

また:

getIntent().getSerializableExtra("selected_dog");

アプリで「selected_dog」を定数にすると、キーを覚えやすくなります。

非常に重要: Dog クラスに Person や Owner などの別のクラスがある場合、このクラスも Serializable を実装する必要があります。

于 2013-06-09T14:38:17.997 に答える
0

Ken Wolf が示唆するように、個々のプロパティを渡すよりも Dog オブジェクトを渡す方が良い考えであることに同意します。私はそれをしました、そして私は苦しみました。将来、さらにいくつかのプロパティを渡したい場合、呼び出し元を再度変更する必要があると想像してください。AddDogActivity クラスを複数のポイントから呼び出したい場合は、すべての呼び出しポイントが更新されていることを確認する必要があります。

主な痛み。私を信じて。

Dog オブジェクトを渡すことにした場合は、Dog クラスをシリアル化する必要があると思います。

于 2013-06-09T14:17:23.683 に答える