2016-02-19 125 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內更新碎片的問題。