小编典典

Android:从另一个打开片段

java

我是Android的新手,这是我的第二个应用程序。我正在创建一个选项卡式活动,其中第一个片段具有创建新任务的形式,第二个片段具有所有已保存任务的列表,第三个片段从第二个列表中选择时将显示任务注释分段。第三个片段也应该像一个聊天活动,当您键入评论并点击发送按钮时,它会发布评论。当我从另一个地方ActivityCommentsActivity.java在下面的链接的GitHub分支中)实施此聊天活动时,该应用程序将完全按预期运行。但是,当我尝试从第三个实现相同的代码时Fragment,出现以下问题:

  • 在启动TasksFragment.java之前,我必须点按两次列表中的项目CommentsFragment

  • 该片段保持空白,不显示任何细节或注释。

  • 标题栏被弄乱了。CommentsFragment第一次启动时,确实可以正确设置标题。但是,当我在片段之间滑动时,它随后变成空白。有时,它甚至显示最后打开的片段的标题,而不是当前打开的片段的标题。

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

其他细节:我传递的数据TasksFragmentCommentsFragment与片段交互方法与主activity–
相互作用AddTask.java。这是我所知道的唯一方法。如果有更好的方法,请告诉我。


阅读 255

收藏
2020-11-26

共1个答案

小编典典

我看到了您的分支,并注意到您正在使用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,我必须更新填充它的适配器,然后将其设置为正确的片段。这就是我所做的:

正确的方法:

在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中的片段时遇到问题的人有所帮助。

2020-11-26