2017-11-04 73 views
-3

我知道有一些問題涉及這個問題,但由於它不使用fragment轉換(我不知道它是如何工作的,因此我沒有使用它) 。findFragmentByTag在除了一個之外的所有片段上返回null

什麼我MainActivity所做的是,它的tabBar增加fragments,並創建功能於一身的信息數據傳遞從一個fragment到另一個fragment

public class MainActivity extends AppCompatActivity implements InputTab.SendMessage, FollowingTab.SendMessage, FollowerTab.SendMessage, ProfileTab.SendMessage, UserSearchResultTab.SendMessage { 

    private SectionsPageAdapter pageAdapter; 
    ViewPager viewPager; 
    public static String currentUser; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container, new ProfileTab()); 

     fragmentTransaction.commit(); 

     pageAdapter = new SectionsPageAdapter(getSupportFragmentManager()); 

     // Sets up the ViewPager with the sections adapter 

     viewPager = (ViewPager) findViewById(R.id.container); 
     setupViewPager(viewPager); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager((viewPager)); 

    } 

    // Adds fragments to SectionsPageAdapter and gives names for the corresponding tab 

    private void setupViewPager(ViewPager viewPager) { 
     SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new InputTab(), "Search"); 
     adapter.addFragment(new ProfileTab(), "Profile"); 
     adapter.addFragment(new GithubTab(), "Github Repos"); 
     adapter.addFragment(new FollowerTab(), "Followers"); 
     adapter.addFragment(new FollowingTab(), "Followings"); 
     adapter.addFragment(new UserSearchResultTab(), "test"); 
     viewPager.setAdapter(adapter); 
    } 

    @Override 
    public void sendDataToProfile(String message) { 
     String tag = "android:switcher:" + R.id.container + ":" + 1; 
     ProfileTab profile = (ProfileTab) getSupportFragmentManager().findFragmentByTag(tag); 
     profile.displayReceivedData(message); 
    } 

    @Override 
    public void sendDataToFollowers(String message) { 
     String tag = "android:switcher:" + R.id.container + ":" + 3; 
     FollowerTab follower = (FollowerTab) getSupportFragmentManager().findFragmentByTag(tag); 
     follower.displayReceivedData(message); 
    } 

數據順利通過到profileTab,但是當我調試它,它給了我null其他分頁像

FollowerTab follower = (FollowerTab) getSupportFragmentManager().findFragmentByTag(tag); 

這一個。因此,每當我嘗試向FollowerTab發送數據時,它都會導致崩潰。

我錯過了什麼,如何才能使它成爲非空fragment

回答

0

在片段事務處理時,您需要爲片段添加標記。你還沒有爲你的片段設置任何標籤。這是你得到空的原因。 你需要把標籤放在你的片段中。

FragmentA fragment=new FragmentA(); 
getSupportFragmentManager() 
.beginTransaction().replace(R.id.container,fragment,"tag").commit(); 

這裏標籤在你使用的時候返回一個標籤findFragmentByTag(tag);

+0

對不起,我必須添加這個?在OnCreate或內部setupViewPager或sendData? – Dawn17

+0

@ Dawn17,你想要對標籤的點擊執行一些操作,然後你可以使用標籤點擊監聽器或內部onclick方法,你可以編寫你的代碼,可以幫助你。或者你可以檢查[https://stackoverflow.com/questions/44132964/how-to-add-fragment-tag-in-a-fragmentpageradapter-to-reference-the-fragment-late],這可能會幫助你 –

相關問題