2013-06-09 1 views
0

Я разрабатываю приложение для Android, и у меня есть сомнения относительно того, что делать.Свойства Pass или экземпляр объекта для другого действия

У меня есть экземпляр класса Dog. Этот класс имеет два свойства isMale и Id (и другие).

Если я прохожу эти два свойства другого 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?

+1

Я рекомендую вам изготовить завод в вашей новой деятельности, которая знает, как создать собственное намерение. Это облегчает принятие будущих изменений. Например, добавьте к нему метод, такой как static Intent createIntent (контекст контекста, int dogId); Связь здесь будет нарушаться способами, которые будут компилироваться, когда требуемые классом входные данные неизбежно меняются. –

+0

@metalideath Спасибо за рекомендацию. У вас есть какой-нибудь пример? – VansFannel

ответ

1

Сделайте свой класс для собак Сериализуемым и все. Тогда вы можете сделать это:

intent.putExtra("selected_dog",mSelectedDog); 

И тогда вы можете получить таким образом, с использованием фрагментов:

getArguments.getSerializable("selected_dog"); 

Для деятельности является:

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

или:

getIntent().getSerializableExtra("selected_dog"); 

Сделайте «selected_dog» постоянным в вашем приложении, было бы гораздо легче запомнить ключ.

ОЧЕНЬ ВАЖНО: если ваш класс Dog имеет другой класс, например Person или Owner, то этот класс должен также выполнять Serializable.

1

Я бы сказал: pass mSelectedDog - это, по-видимому, правильное инкапсулирование для меня. Разве это не то, что вы хотите сделать? Действие в объекте класса Dog в другом мероприятии?

Что произойдет, если вам нужно больше свойств Dog? Решение о передаче каждой собственности для меня не очень хорошо.

0

Как предлагает Кен Вольф, я согласен с тем, что лучше передать объект «Собака», а не передавать отдельные свойства. Я сделал это, и я пострадал. Представьте, что в будущем вы захотите передать еще несколько свойств, вам придется снова внести изменения в своего вызывающего абонента. Предположим, вы хотите назвать свой класс AddDogActivity из нескольких точек, тогда вы должны убедиться, что каждая точка вызова обновлена.

Основные боли. Доверьтесь мне.

В случае, если вы решите передать объект Dog, я считаю, что вам придется сериализовать свой класс Dog.

+0

Если вы хотите передать весь объект, просто сделайте его простым. Тогда вы можете передать это в намерении. Генератор здесь devk.он/проектируемый/parcelabler –

Смежные вопросы