android - 在使用 ViewPager 的选项卡布局上获取空白视图
问题描述
我正在尝试创建一个选项卡布局,其中包含三个显示图像和文本的选项卡。不幸的是,这些选项卡没有显示任何内容,我在 Logcat 上找不到任何关于错误的信息。
这是我的主要代码:
public class JavaTradHouse extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_trad_house);
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
viewPager = (ViewPager) findViewById(R.id.viewpagerTradHouses);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.AddFragment(new FragmentJoglo(), "Joglo Traditional House");
adapter.AddFragment(new FragmentSukuTengger(), "Suku Tengger Traditional House");
adapter.AddFragment(new FragmentTogogAnjing(), "Togog Anjing Traditional House");
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
}
这是我的 ViewPager 适配器类代码:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentListTitles = new ArrayList<>();
public ViewPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentListTitles.get(position);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
/* switch (position)
{
case 1 :
FragmentJoglo joglofragment = new FragmentJoglo();
return joglofragment;
case 2 :
FragmentSukuTengger sukutenggerfragment = new FragmentSukuTengger();
return sukutenggerfragment;
case 3 :
FragmentTogogAnjing togoganjingfragment = new FragmentTogogAnjing();
return togoganjingfragment;
default :
return null;
}*/ // Turning this one into a comment in case this method works
}
@Override
public int getCount() {
return fragmentList.size();
}
public void AddFragment(Fragment fragment, String Title){
fragmentList.add(fragment);
fragmentListTitles.add(Title);
}
}
我是标签布局的新手,因为我的国家没有多少参考资料实际上深入讨论它。有什么我可以在这里做的吗?正如我之前所说,logcat 没有显示任何内容,因为它是一个成功的程序执行。
任何帮助将不胜感激。
解决方案
使用这个 ViewPagerAdaper
class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {
private val mFragmentList = ArrayList<androidx.fragment.app.Fragment>()
private val mFragmentTitleList = ArrayList<String>()
override fun getItem(position: Int): androidx.fragment.app.Fragment {
return mFragmentList[position]
}
override fun getCount(): Int {
return mFragmentList.size
}
fun addFragment(fragment: androidx.fragment.app.Fragment, title: String) {
mFragmentList.add(fragment)
mFragmentTitleList.add(title)
}
fun addFragment(title: String) {
mFragmentTitleList.add(title)
}
override fun getPageTitle(position: Int): CharSequence? {
return mFragmentTitleList[position]
}
fun getFragmentList(): ArrayList<androidx.fragment.app.Fragment> {
return mFragmentList
}
}
这是 Viewpager Adapter 在 onCreate() 中调用 setupviewpager() 方法的主要代码。
private fun setupViewPager() {
try {
adapter = ViewPagerAdapter(childFragmentManager)
val customersFragment = CustomerListFragment()
val suppliersFragment = SupplierListFragment()
adapter.addFragment(customersFragment, getString(R.string.str_customers))
adapter.addFragment(suppliersFragment, getString(R.string.str_suppliers))
viewPager?.adapter = adapter
tabs?.setupWithViewPager(viewPager!!)
onTabSelectedListener()
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun onTabSelectedListener(): TabLayout.OnTabSelectedListener {
return object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
viewPager.currentItem = tab.position
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 101 && data != null) {
if (viewPager.currentItem == 0) {
val customerListFragment = adapter.instantiateItem(
viewPager,
viewPager.currentItem
) as CustomerListFragment
} else if (viewPager.currentItem == 0) {
val customerListFragment = adapter.instantiateItem(
viewPager,
viewPager.currentItem
) as SupplierListFragment
}
}
}
我用customerFragment 或supplierFragment 创建,替换你的fragment。
推荐阅读
- docker - 有条件地在 Dockerfile 中公开端口
- wcf - 如何诊断来自 Web API 的慢速 HTTPS 请求
- python - 如何在 tensorflow 中运行 model.fit() 期间输出一些数据?
- google-app-engine - GCP:如果 __name__ == '__main__' 不工作
- sql - 如果值为 null,Postgre SQL 忽略过滤条件
- c# - 在单个表单上检测键盘输入和鼠标活动
- reactjs - 带有 react-markdown 的新行
- python - Spyder 中的后备完成是什么?
- java - 无法将 arraylist 值传输到数组
- ruby - 取出一个类的实例以测试作为属性给出的回调