2016-02-19 4 views
1

Я новичок в Android, и это мое второе приложение. Я создаю вкладку, в которой первый фрагмент имеет форму для создания новой задачи, второй фрагмент имеет список всех сохраненных задач, а третий фрагмент будет отображать комментарии к задаче, если выбран из списка во втором фрагмент. Третий фрагмент также должен действовать как активность чата, который публикует комментарии при вводе их и нажимает кнопку отправки. Когда я реализую эту активность в чате из отдельного Activity (CommentsActivity.java в филиале GitHub по ссылке ниже), приложение работает абсолютно так, как предполагается. Однако, когда я пытаюсь реализовать один и тот же код с третьего Fragment, у меня есть следующие проблемы:Android: открытие фрагмента из другого

  • Я должен нажать на элемент списка (в TasksFragment.java) дважды, прежде чем CommentsFragment запускается.

  • Фрагмент остается пустым и не содержит никаких подробностей или комментариев.

  • Бар заголовка перепутался. Он правильно устанавливает заголовок, когда CommentsFragment запускается в первый раз. Однако впоследствии он становится пустым, когда я пробираюсь между фрагментами. Иногда он даже отображает заголовок последнего открытого фрагмента, а не тот, который открыт в данный момент.

Вы можете найти свой код здесь: https://github.com/geekskool/android-teamwork/tree/only_fragments

Других деталей: Я передаю данные между TasksFragment и CommentsFragment с методами взаимодействия фрагментов, которые взаимодействуют с основным activity-- AddTask.java. Это единственный способ узнать. Если есть лучший способ, пожалуйста, дайте мне знать.

+0

Вы можете удалить логарифмический код, поскольку он не имеет значения здесь, logcat необходим только тогда, когда вы получаете сбой – Bhargav

+0

Удалено лог-код. :) –

ответ

2

Я увидел вашу ветку и заметил, что вы используете ViewPager и пытаетесь использовать FragmentTransaction для обновления фрагментов внутри ViewPager. Это не работает, поскольку фрагменты уже создаются при создании ViewPagerAdapter и не могут быть присоединены к ViewPager через FragmentTransaction.

Вот как я решил это. Так как я использовал ViewPager, используя FragmentTransaction, как показано ниже, не работает:

Неправильный путь:

FragmentManager fm = getSupportFragmentManager(); 
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 
CommentsFragment commentsFragment = CommentsFragment.newInstance(mTaskId, mTaskName); 
ft.replace(R.id.container, commentsFragment); 
ft.addToBackStack(null); 
ft.commit(); 

С ViewPager, я должен был обновить адаптер заполнения, а затем установить его на правильный фрагмент. Это то, что я сделал:

Правильный путь:

В onListItemClick() в TasksFragment, вызовите этот метод интерфейса onFragmentInteraction. А затем в основной деятельности AddTask, реализовать его, как показано ниже:

@Override 
public void onFragmentInteraction(String taskId, String taskName, String assigneeRef) { 
    CommentsFragment commentsFragment = CommentsFragment.newInstance(taskId, taskName); 
    mSectionsPagerAdapter.fragmentList.remove(2); 
    mSectionsPagerAdapter.fragmentList.add(commentsFragment); 
    mSectionsPagerAdapter.notifyDataSetChanged(); 
    mViewPager.setCurrentItem(2); 
} 

Надеется, что это помогает, и кто-то, кто сталкивается с проблемой с обновлением фрагментов внутри ViewPager.

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