2016-02-19 80 views
1

我是Android新手,这是我的第二个应用程序。我创建了一个标签式活动,其中第一个片段具有用于创建新任务的表单,第二个片段具有所有已保存任务的列表,第三个片段将在第二个列表中从列表中选择时显示任务上的注释分段。第三个片段也应该像聊天活动一样,当您键入它们时发布评论,然后点击发送按钮。当我从单独的Activity(下面的链接中的GitHub分支中的CommentsActivity.java)实施此聊天活动时,该应用完全按照它应有的运行。然而,当我尝试从第三Fragment执行相同的代码,我有以下问题:Android:打开另一个片段

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

  • 该片段保持空白并且不显示任何细节或评论。

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

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

其他细节:我传递的TasksFragmentCommentsFragment与与主activity-- AddTask.java互动片段交互方法之间的数据。这是我知道的唯一途径。如果有更好的方法,请告诉我。

+0

您可以删除logcat,因为它在这里不相关,只有在发生崩溃时才需要logcat – Bhargav

+0

删除了logcat。 :) –

回答

2

我看到您的分支,并注意到您正在使用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内更新碎片的问题。