如何将片段附加到MainActivity?尝试在空对象引用上调用虚方法

问题描述 投票:0回答:1

我正在尝试执行时收到错误(尝试在空对象引用上调用虚方法)

FragmentThree f = (FragmentThree) getSupportFragmentManager().findFragmentByTag(tag);
        f.displayReceivedDataLanLon(message);

这是整个班级的样子

public class MainActivity extends AppCompatActivity implements FragmentOne.SendMessage, FragmentOne.SendMessageLanLon {

    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        viewPager = (ViewPager) findViewById(R.id.viewPager);
        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    @Override
    public void sendData(String message) {
        String tag = "android:switcher:" + R.id.viewPager + ":" + 1;
        FragmentTwo f = (FragmentTwo) getSupportFragmentManager().findFragmentByTag(tag);
        f.displayReceivedData(message);
    }

    @Override
    public void sendDataLatLon(String message) {
        String tag = "android:switcher:" + R.id.viewPager + ":" + 2;
        FragmentThree f = (FragmentThree) getSupportFragmentManager().findFragmentByTag(tag);
        f.displayReceivedDataLanLon(message);
    }
}

这是ViewPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        if (position == 0) {
            fragment = new FragmentOne();
        } else if (position == 1) {
            fragment = new FragmentTwo();
        } else if (position == 2) {
            fragment = new FragmentThree();
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return 3;
    }

片段管理器的某个人找不到我的片段,这可能意味着它尚未附加。但我不知道我怎么能做到这一点,或者这是肯定的问题。

android android-fragments virtual-method
1个回答
0
投票

使用

viewPager.setOffscreenPageLimit(2);

这种方法可以解决您的问题。但我建议你尝试扩展FragmentStatePagerAdapter而不是FragmentPagerAdapter。它将保留您的寻呼机状态。

更新我的测试:我在onCreate()方法中放了一些代码,一切正常:

viewPager.setOffscreenPageLimit(2);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
     @Override
     public void run() {
         sendData("test message");
         sendDataLatLon("test message");
     }
}, 3000);

当Fragment尚未创建时,可能会调用两个方法sendDatasendDataLatLon,尝试检查它。

© www.soinside.com 2019 - 2024. All rights reserved.