2014-01-30 2 views
1

У меня есть MainActivity A, из которого пользователь может выбрать различные элементы, которые отображаются в Activity B в GridView. Между тем деятельность у меня есть Sliding-Transistion (Activity A выскальзывает слева, Activity B slides in from right)Android: Как заполнить GridView программно до начала перехода?

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

Так что мой вопрос: Можно ли создать/загрузить Activity BПеред начинается переход?

enter image description here

Я придаю некоторый код, но все это довольно прямо вперед. Только элементы сетки состоит из изображений с различными состояниями ...

активность A: начать Intent (как обычно)

Intent intent = new Intent(this, SoundShareActivity.class); 
//... 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
overridePendingTransition(anim.slide_in_from_right_to_left, 
      anim.slide_out_to_left); 
//anim defined in xml 

активность B: OnCreate

protected void onCreate(Bundle savedInstanceState) { 
//... 
mGridView = (GridView) findViewById(R.id.grid_view_sounds); 
mAdapter = new SoundAdapter(getApplicationContext(), THE_DATA); 
mGridView.setAdapter(mAdapter); 
mGridView.setOnItemClickListener(...); 
mGridView.setLongClickable(true); 
mGridView.setOnItemLongClickListener(...); 
+0

Не знаете, как это будет работать с Activities, но вы можете изучить его с помощью фрагментов. – Submersed

+0

Как указано другими, почему вы не используете фрагменты? Выполняете ли вы много операций в файле adapter.getView (...)? И, вы уверены в этом намерении New_Task? –

ответ

3
  1. Заменить вашу активность в FragmentActivity
  2. реализовать GridView и установить адаптер в конструкторе фрагмента/функции onCreateView
  3. Заменить фрагмент функцией FragmentTransaction setCustomAnimations.

очень просто реализовать

1

Это не возможно с помощью деятельности, потому что вы не можете назначить контент на View, пока не будет завышена, что происходит на setContentView() в деятельности, как правило, в OnCreate(): так Activity должен быть запущен первым. Но, поскольку только один экземпляр Activity может быть активным за один раз, вы не можете сделать это, пока находитесь в своем первом Activity.

Workaroud: использование Fragment s. У вас может быть много экземпляров фрагментов за один раз, поэтому вы можете показать пользователю, например, Fragment1 при загрузке Fragment2. ViewPager часто используется в сочетании с фрагментами, и он загружает три страницы по умолчанию, а это означает, что, пока вы видите страницу в ViewPager, предыдущая и следующая страницы и соответствующие фрагменты загружаются или уже загружаются. Вы можете использовать подобный метод для своей задачи.

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