将属性或对象实例传递给另一个活动

时间:2013-06-09 14:04:03

标签: android android-activity

我正在开发一个Android应用程序,我怀疑该怎么做。

我有一个Dog类的实例。此类有两个属性isMaleId(以及另一个属性)。

如果我将这两个属性传递给另一个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类对象。

哪个更好,通过这两个属性或将mSelectedDog传递给AddDogActivity

3 个答案:

答案 0 :(得分:1)

我会说传递mSelectedDog - 这似乎是对我的适当封装。这最终不是你想做的吗?在另一个Activity中处理Dog类对象?

如果您需要Dog的更多属性,会发生什么?传递每个属性的解决方案对我来说不是很好。

答案 1 :(得分:1)

让你的Dog类实现Serializable,就是这样。然后你可以这样做:

intent.putExtra("selected_dog",mSelectedDog);

然后你可以使用Fragments:

以这种方式检索
getArguments.getSerializable("selected_dog");

对于活动是:

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

或:

getIntent().getSerializableExtra("selected_dog");

让“selected_dog”在你的应用中保持不变,记住密钥会更容易。

非常重要:如果你的Dog类有另一个类,例如Person或Owner,那么这个类也需要实现Serializable。

答案 2 :(得分:0)

正如Ken Wolf建议的那样,我同意传递Dog对象而不是传递单个属性是一个更好的主意。我做到了,我受苦了。想象一下,在未来你想要传递更多属性,你将不得不再次对你的来电者进行更改。假设您想要从多个点调用AddDogActivity类,那么您必须确保每个调用点都已更新。

主要疼痛。相信我。

如果您决定传递Dog对象,我相信您必须序列化您的Dog类。