为什么我的代码为存在的片段返回空指针?



我在安卓工作室有一组标签。它们都工作正常,但没有显示任何内容,即使它们确实有内容。所以我在这个网站上做了一些挖掘,我发现了用户遇到的碎片问题

所以我遵循了用户给出的建议。但似乎我的应用程序由于空指针异常而崩溃。任何人都可以帮我发现错误吗:
主活动.java

public class MainActivity extends AppCompatActivity implements Photos.OnFragmentInteractionListener, About.OnFragmentInteractionListener, Watch.OnFragmentInteractionListener{
private TabLayout myTabLayOut;
private  ViewPager viewPager;
private  TabsPagerAdapter tabsPagerAdapter;
public MainActivity()
{
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_content);
myTabLayOut = findViewById(R.id.tabLayout);
myTabLayOut.addTab(myTabLayOut.newTab().setText("Photos"));
myTabLayOut.addTab(myTabLayOut.newTab().setText("About"));
myTabLayOut.addTab(myTabLayOut.newTab().setText("Watch"));
myTabLayOut.setTabGravity(TabLayout.GRAVITY_FILL);

myTabLayOut.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager = findViewById(R.id.pager);
//Item 0 being the photos fragment. Just for testing for the time being. WHERE The error happens
tabsPagerAdapter = new TabsPagerAdapter(tabsPagerAdapter.getItem(0).getTargetFragment(), myTabLayOut.getTabCount());
viewPager.setAdapter(tabsPagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(myTabLayOut));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu,menu);
return true;
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}

选项卡寻呼适配器.java

public class TabsPagerAdapter extends FragmentPagerAdapter {
//A field to hold the number of tabs
private int numberOfTabs;
public TabsPagerAdapter(Fragment fragmentManager, int numberOfTabs)
{
super(fragmentManager.getChildFragmentManager());
this.numberOfTabs = numberOfTabs;
}
//Which item to return depending on the position
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
return new Photos();
case 1:
return new About();
case 2:
return new Watch();
default:
return null;
}
}
@Override
public int getCount() {
return numberOfTabs;
}
}

您的问题与以下行有关:

tabsPagerAdapter = new TabsPagerAdapter(tabsPagerAdapter.getItem(0)...

在尝试分配tabsPagerAdapter的值时,您正在尝试使用此对象中的值,该值当时NULL

FragmentViewPagersgetItem方法名称具有误导性 - 它不会返回寻呼器中显示的实际片段,它仅用于创建它们一次。如果您尝试调用此方法,您将始终获得一个新项目。

最新更新