【问题标题】:Tabs of Tab Layout don't display anything选项卡布局的选项卡不显示任何内容
【发布时间】:2019-11-06 07:34:23
【问题描述】:

此代码将创建 3 个由片段组成的选项卡,其中包含一个图像和文本说明,每个选项卡都对其进行说明。有一个障碍,选项卡根本不显示任何内容,全部 3 个。这是主要代码:

public class Cookings extends AppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cookings);
        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        viewPager = (ViewPager) findViewById(R.id.viewpager-id);

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.AddFragment(new FragmentRoastedMeat(), "Roasted Meat");
        adapter.AddFragment(new FragmentStirFryVeggies(), "Stir-fry Vegetables");
        adapter.AddFragment(new FragmentBakedFish(), "Baked Fish");

        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(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);

    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
    public void AddFragment(Fragment fragment, String Title){
       fragmentList.add(fragment);
       fragmentListTitles.add(Title);
    }
}

我想在这里解决两个关键问题:

  1. ViewPagerAdapter 类的主构造函数中 super(fm) 函数部分的弃用,以及
  2. 主选项卡布局上的选项卡不显示我制作的任何片段。

任何帮助将不胜感激。

【问题讨论】:

    标签: java android android-fragments android-tablayout


    【解决方案1】:

    对于弃用修复,您需要在 ViewPagerAdapter 中添加如下行为:

    import androidx.fragment.app.FragmentStatePagerAdapter;
         ....
         public ViewPagerAdapter(@NonNull FragmentManager fm) {
                super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
            }
    

    尝试使用下面的代码:

    布局

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    
            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="fixed"
                app:tabGravity="fill"/>
        </android.support.design.widget.AppBarLayout>
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
    </android.support.design.widget.CoordinatorLayout>
    

    活动

    import android.os.Bundle;
    import android.support.design.widget.TabLayout;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    
    import java.util.ArrayList;
    import java.util.List;     
    
    public class MainActivity extends AppCompatActivity {
    
        private Toolbar toolbar;
        private TabLayout tabLayout;
        private ViewPager viewPager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
            viewPager = (ViewPager) findViewById(R.id.viewpager);
            setupViewPager(viewPager);
    
            tabLayout = (TabLayout) findViewById(R.id.tabs);
            tabLayout.setupWithViewPager(viewPager);
        }
    
        private void setupViewPager(ViewPager viewPager) {
            ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
            adapter.addFragment(new OneFragment(), "ONE");
            adapter.addFragment(new TwoFragment(), "TWO");
            adapter.addFragment(new ThreeFragment(), "THREE");
            viewPager.setAdapter(adapter);
        }
    
        class ViewPagerAdapter extends FragmentPagerAdapter {
            private final List<Fragment> mFragmentList = new ArrayList<>();
            private final List<String> mFragmentTitleList = new ArrayList<>();
    
            public ViewPagerAdapter(FragmentManager manager) {
                super(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
            }
    
            @Override
            public Fragment getItem(int position) {
                return mFragmentList.get(position);
            }
    
            @Override
            public int getCount() {
                return mFragmentList.size();
            }
    
            public void addFragment(Fragment fragment, String title) {
                mFragmentList.add(fragment);
                mFragmentTitleList.add(title);
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                return mFragmentTitleList.get(position);
            }
        }
    }
    

    【讨论】:

    • 我明白了,所以从某种意义上说,在代码中也实现了一个工具栏,对吗?我会在 2 小时内试一试。非常感谢。
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多