【问题标题】:findFragmentByTag returns null on all fragments except onefindFragmentByTag 对除一个以外的所有片段返回 null
【发布时间】:2017-11-04 03:58:06
【问题描述】:

我知道有一些问题涵盖了这个问题,但我的问题有点不同,因为它不使用 fragment 转换(我不知道它是如何工作的,所以我没有使用它)。

我的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

【问题讨论】:

  • 有点晚了,但是。您使用的是SectionsPageAdapter 还是FragmentStatePagerAdapter

标签: android android-fragments


【解决方案1】:

在进行片段交易时,您需要为片段添加标签。您还没有为您的片段设置任何标签。这就是你得到空值的原因。 你需要把标签放在你的片段中。

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

here标签在你使用findFragmentByTag(tag)的时候返回一个标签;

【讨论】:

  • 对不起,我必须在哪里添加这个?在 OnCreate 或 setupViewPager 或 sendData 内部?
  • @Dawn17 ,您想在单击选项卡时执行一些操作,然后您可以使用选项卡单击侦听器或在 onclick 方法中编写可能对您有所帮助的代码。或者你可以查看[stackoverflow.com/questions/44132964/…这可能对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多