我是Android的新手,这是我的第二个应用程序。我正在创建一个选项卡式活动,其中第一个片段具有创建新任务的形式,第二个片段具有所有已保存任务的列表,第三个片段从第二个列表中选择时将显示任务注释分段。第三个片段也应该像一个聊天活动,当您键入评论并点击发送按钮时,它会发布评论。当我从另一个地方Activity(CommentsActivity.java在下面的链接的GitHub分支中)实施此聊天活动时,该应用程序将完全按预期运行。但是,当我尝试从第三个实现相同的代码时Fragment,出现以下问题:
Activity
CommentsActivity.java
Fragment
在启动TasksFragment.java之前,我必须点按两次列表中的项目CommentsFragment。
TasksFragment.java
CommentsFragment
该片段保持空白,不显示任何细节或注释。
标题栏被弄乱了。CommentsFragment第一次启动时,确实可以正确设置标题。但是,当我在片段之间滑动时,它随后变成空白。有时,它甚至显示最后打开的片段的标题,而不是当前打开的片段的标题。
您可以在这里找到我所有的代码:https : //github.com/geekskool/android- teamwork/tree/only_fragments
其他细节:我传递的数据TasksFragment和CommentsFragment与片段交互方法与主activity– 相互作用AddTask.java。这是我所知道的唯一方法。如果有更好的方法,请告诉我。
TasksFragment
AddTask.java
我看到了您的分支,并注意到您正在使用ViewPager并尝试使用FragmentTransaction来更新内的片段ViewPager。这并不是因为碎片将已经被中时创建工作,ViewPagerAdapter创建并不能连接到ViewPager通过FragmentTransaction。
ViewPager
FragmentTransaction
ViewPagerAdapter
这是我解决的方法。由于我使用的是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中的片段时遇到问题的人有所帮助。