简体   繁体   中英

Android: Opening a Fragment from another

I am new to Android and this is my second app. I am creating a tabbed activity where the first fragment has a form to create a new task, the second fragment has the list of all the saved tasks, and the third fragment will show the comments on a task when selected from the list in the second fragment. The third fragment is also supposed to act like a chat activity which posts comments when you type them in and tap the send button. When I implement this chat activity from a separate Activity ( CommentsActivity.java in the GitHub branch in the link below), the app runs absolutely as it is supposed to. However, when I try to implement the same code from the third Fragment , I have the following problems:

  • I have to tap the list item (in TasksFragment.java ) twice before the CommentsFragment is launched.

  • The fragment remains blank and shows no details or comments.

  • The title bar is messed up. It does set the title correctly when CommentsFragment is launched for the first time. However, it becomes blank subsequently, when I swipe between the fragments . Sometimes it even shows the title of the last open fragment instead of the one currently open.

You can find all my code here: https://github.com/geekskool/android-teamwork/tree/only_fragments

Other details: I am passing the data between the TasksFragment and the CommentsFragment with fragment interaction methods that interact with the main activity-- AddTask.java . This is the only way I know of. If there is a better way, please let me know.

I saw your branch and noticed that you are using a ViewPager and trying to use FragmentTransaction to update the fragments inside the ViewPager . This does not work as the fragments will already have been created when the ViewPagerAdapter is created and cannot be attached to the ViewPager through a FragmentTransaction .

Here is how I solved it. Since I was using a ViewPager, using FragmentTransaction as below did not work:

Wrong way:

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();

With the ViewPager, I had to update the adapter populating it and then set it to the correct fragment. This is what I did:

Right way:

In the onListItemClick() in the TasksFragment, call this interface method onFragmentInteraction. And then in the main activity AddTask, implement it as below:

@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);
}

Hope this helps you and someone else who faces a problem with updating Fragments inside a ViewPager.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM