2013-04-06 5 views
2

У меня есть два вида деятельности: MainActivity начинает NewReminderActivity. Первый будет уведомлен о создании нового напоминания. Поэтому он реализует интерфейс OnEventAddedListener.Как передать интерфейс конструктору при создании намерения

Нужно ли использовать сериализацию для добавления MainActivity в намерение или есть лучшее решение? Я никогда не видел примеров, использующих сериализацию, чтобы выполнить это, и я уверен, что очень часто передавать интерфейс из одной активности в другую для общения.

public class MainActivity extends Activity implements OnEventAddedListener { 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     if(item.getItemId() == R.id.action_addReminder) 
     { 
      // NewReminderActivity c = new NewReminderActivity(this); 
      // Intent intent = new Intent(this, c.getClass()); // this won't work 

      Intent intent = new Intent(this, NewReminderActivity.class); 
      startActivity(intent); 
      return true; 
     } else { 
      return super.onOptionsItemSelected(item); 
     } 
    } 
} 

ответ

1

Вы абсолютно не должны пытаться пройти один вид деятельности к другому, будь то с помощью сериализации (который не будет работать даже по целому ряду причин), или установки ссылки.

Android будет заботиться о очистки старых мероприятий из памяти, но не будет в состоянии сделать это до тех пор, пока вы держитесь за ссылки от него. Никогда не держитесь за другие действия или фрагменты вне их контекста!

Вы должны следовать документации по starting activities and getting results с помощью startActivityForResult() и обеспечить результат этой деятельности через onActivityResult(int, int, Intent).

+0

Спасибо, что работает для меня. Только для уточнения: я только должен использовать обратные вызовы для Activity <-> Фрагмент связи? – user2246120

+0

Не обязательно, вам доступны другие варианты. Из фрагмента вы можете получить действие (если оно привязано к одному) с помощью 'getActivity()'. Если вы знаете тип, вы можете применить его к ожидаемому типу и вызвать методы на нем. И наоборот, вы должны быть предельно осторожны; обычно вы запрашиваете FragmentManager при попытке найти определенный фрагмент. Независимо от того, что вы делаете, ни в одном из этих случаев не держитесь за ссылки, потому что вы запретите GC очищать эти объекты. –

+0

Я просто ищу хорошую практику кода. В соответствии с этим: [link] (http://developer.android.com/training/basics/fragments/communicating.html) Я должен использовать обратные вызовы для связи. Любые предложения о том, когда использовать (деятельность <-> деятельность, деятельность <-> фрагмент)? – user2246120

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