簡體   English   中英

Android:從另一個打開片段

[英]Android: Opening a Fragment from another

我是Android的新手,這是我的第二個應用程序。 我正在創建一個選項卡式活動,其中第一個片段具有創建新任務的形式,第二個片段具有所有已保存任務的列表,第三個片段從第二個列表中選擇時將顯示任務注釋分段。 第三個片段也應該像一個聊天活動,當您鍵入評論並點擊發送按鈕時,它會發布評論。 當我從單獨的Activity (在下面的鏈接的GitHub分支中的CommentsActivity.java中實現此聊天活動時,該應用程序將按預期運行。 但是,當我嘗試從第三個Fragment實現相同的代碼時,出現以下問題:

  • TasksFragment.java CommentsFragment之前,我必須點擊兩次列表項(在TasksFragment.java )。

  • 該片段保持空白,不顯示任何細節或注釋。

  • 標題欄被弄亂了。 當它不正確設置標題CommentsFragment啟動首次。 但是,當我在片段之間滑動時,它隨后變成空白。 有時,它甚至顯示最后打開的片段的標題,而不是當前打開的片段的標題。

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

其他細節:我傳遞的數據TasksFragmentCommentsFragment與與主activity--互動片段交互方法AddTask.java 這是我所知道的唯一方法。 如果有更好的方法,請告訴我。

我看到了您的分支,並注意到您正在使用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中的片段時遇到問題的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM