【问题标题】:Getting blank view on ViewPager-utilizing Tab Layout在使用 ViewPager 的选项卡布局上获取空白视图
【发布时间】:2020-03-02 11:09:28
【问题描述】:

我正在尝试创建一个选项卡布局,其中包含三个显示图像和文本的选项卡。不幸的是,这些选项卡没有显示任何内容,我在 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 没有显示任何内容,因为它是一个成功的程序执行。

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-studio android-fragments android-tablayout


    【解决方案1】:

    使用这个 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或者suppliersFragment创建,替换你的fragment。

    【讨论】:

    • 感谢您的帮助,但遗憾的是,您在第二列中评论的应用程序与我的不同。还是在代码的第二列某处对适配器的主函数调用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多