我一直在YouTube上学习关于选项卡布局的教程,当我完成教程并运行应用程序时,应用程序一直停止运行。所以,我打开我的日志猫看看出了什么问题,它说:";由java.lang.ClassCastException引起:androidx.viewpager.widget.viewpager无法转换为com.google.android.material.tabs.TabLayout"。我找不到什么";不能强制转换为";意思是,但找不到任何解释它的文件。
private Toolbar toolbar;
private ViewPager viewPager;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbarClipBridge);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewpagerClipBridge);
tabLayout = findViewById(R.id.viewpagerClipBridge);
fragmentDevices fragmentDevices = new fragmentDevices();
fragmentSyncActivity fragmentSyncActivity = new fragmentSyncActivity();
fragmentSettings fragmentSettings = new fragmentSettings();
ViewPageAdapter viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager(), 0);
viewPageAdapter.addFragment(fragmentDevices, "Devices");
viewPageAdapter.addFragment(fragmentSyncActivity, "Sync Activity");
viewPageAdapter.addFragment(fragmentSettings, "Settings");
viewPager.setAdapter(viewPageAdapter);
tabLayout.getTabAt(0).setIcon(R.drawable.ic_baseline_devices_24);
tabLayout.getTabAt(1).setIcon(R.drawable.ic_baseline_sync_24);
tabLayout.getTabAt(2).setIcon(R.drawable.ic_baseline_settings_24);
}
private class ViewPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments = new ArrayList<>();
private List<String> fragmentTitle = new ArrayList<>();
public ViewPageAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
public void addFragment(Fragment fragment, String title){
fragments.add(fragment);
fragmentTitle.add(title);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitle.get(position);
}
}
Logcat:
引起原因:java.lang.ClassCastException:androidx.viewpager.widget.viewpager无法转换为com.google.android.material.tab.Layout
我的logcat 的图像
在行中:
viewPager = findViewById(R.id.viewpagerClipBridge);
tabLayout = findViewById(R.id.viewpagerClipBridge);
代码试图查看activity_main.xml
文件,并找到一个id为R.id.viewpagerClipBridge
的XML对象。XML对象的类型可能是ViewPager。
在下面的一行中,代码再次查找XML文件。同样,使用idR.id.viewpagerClipBridge
,代码尝试将返回值设置为TabLayout
类型的变量tab layout
。
由于ViewPager的类型!=TabLayout的类型,不能将其强制转换为该类型。
我认为您在第二行findViewById
中使用了错误的id。调查您的activity_main.xml
并查找TabLayout
的id。