Android:打开另一个片段

我是Android新手,这是我的第二个应用程序。 我正在创建一个标签式活动,其中第一个片段具有创建新任务的表单,第二个片段具有所有已保存任务的列表,第三个片段将显示从第二个列表中选择的任务的注释分段。 第三个片段也应该像聊天活动一样,当您输入注释时发布注释并点击发送按钮。 当我从一个单独的Activity (下面的链接中的GitHub分支中的CommentsActivity.java实现这个聊天活动时,应用程序绝对按预期运行。 但是,当我尝试从第三个Fragment实现相同的代码时,我有以下问题:

  • 我必须在TasksFragment.java CommentsFragment之前两次点击列表项(在TasksFragment.java )。

  • 该片段保持空白,不显示任何详细信息或评论。

  • 标题栏搞砸了。 第一次启动CommentsFragment时,它会正确设置标题。 然而,当我在片段之间滑动时,它随后变成空白。 有时甚至会显示最后一个打开片段的标题,而不是当前打开的片段。

你可以在这里找到我的所有代码: https : //github.com/geekskool/android-teamwork/tree/only_fragments

其他细节:我使用与主要活动 – AddTask.java交互的片段交互方法在TasksFragmentCommentsFragment之间传递数据。 这是我所知道的唯一方式。 如果有更好的方法,请告诉我。

我看到了你的分支,发现你正在使用ViewPager并尝试使用FragmentTransaction来更新ViewPager的片段。 这不起作用,因为在创建ViewPagerAdapter时已经创建了片段,并且无法通过FragmentTransaction将其附加到ViewPager

这是我解决它的方式。 由于我使用的是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,我不得不更新填充它的适配器,然后将其设置为正确的片段。 这就是我做的:

正确的方法:

在TasksFragment的onListItemClick()中,在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中更新碎片时遇到问题的其他人。