代码之家  ›  专栏  ›  技术社区  ›  parsa

为什么Android材料设计选项卡布局不起作用?

  •  0
  • parsa  · 技术社区  · 6 年前

    我试图用viewpager创建一个Tablayout,但它不起作用。当它被装载时 tabLayout.setupWithViewPager(viewPager); 在Patient Main Activity类中,输出为:

    enter image description here

    当我使用 viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 在Patient Main Activity类中,输出为:

    enter image description here

    但是片段没有显示,也没有可用的滑动。

    我按书上说的那样做。我使用了一些资源,例如 1 , 2 。我个人认为代码可能不是问题所在,使用的SDK版本有问题,但我可能是错误的。这是我的代码:

    主要活动:

    package parsa.lop.adjust;
    
    import android.support.design.widget.TabLayout;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TabHost;
    
    public class PatientMain extends AppCompatActivity {
    
        private TabHost tabHost;
    
        private TabLayout tabLayout;
        private ViewPager viewPager;
        private ViewPagerAdapter viewPagerAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_patient_main);
    
            tabLayout = (TabLayout)findViewById(R.id.tabLayout);
            viewPager = (ViewPager)findViewById(R.id.viewPager);
    
            viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
            viewPagerAdapter.addFragment(new MyDietFragment(), "My Diet");
            viewPagerAdapter.addFragment(new MyWorkoutFragment(), "My Workout");
            viewPagerAdapter.addFragment(new StartProgramFragment(), "Start a Program");
            viewPager.setAdapter(viewPagerAdapter);
    
    
    
            final TabLayout.Tab myDietTab = tabLayout.newTab();
            final TabLayout.Tab myWorkOutTab = tabLayout.newTab();
            final TabLayout.Tab startProgramTab = tabLayout.newTab();
    
            myDietTab.setText("My Diet");
            myWorkOutTab.setText("My Workout");
            startProgramTab.setText("Start a Program");
    
            tabLayout.addTab(startProgramTab,0);
            tabLayout.addTab(myDietTab,1);
            tabLayout.addTab(myWorkOutTab,2);
    
    //        tabLayout.setupWithViewPager(viewPager);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    
        }
    }
    

    viewpager适配器:

    package parsa.lop.adjust;
    
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.app.FragmentStatePagerAdapter;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ViewPagerAdapter extends FragmentPagerAdapter {
    
        private List<String> fragmentTitleList = new ArrayList<String>();
        private List<Fragment> fragmentList = new ArrayList<Fragment>();
    
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }
    
        @Override
        public int getCount() {
            return 0;
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return fragmentTitleList.get(position);
        }
    
        public void addFragment(Fragment fragment, String title){
            fragmentList.add(fragment);
            fragmentTitleList.add(title);
        }
    }
    

    其中一个片段:

    package parsa.lop.adjust;
    
    
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class MyDietFragment extends Fragment {
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.my_diet_view, container, false);
        }
    }
    

    我的主要布局:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".PatientMain">
    
        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:background="@color/colorPrimary"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true">
    
        </android.support.design.widget.TabLayout>
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </android.support.v4.view.ViewPager>
    
    </android.support.constraint.ConstraintLayout>
    

    我的片段布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="Tab 1"
            android:textSize="36sp" />
    
    </RelativeLayout>
    

    年级学生:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "parsa.lop.adjust"
            minSdkVersion 21
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        implementation 'com.android.support:design:27.1.1'
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Jackey    6 年前

    @Override 
    public int getCount() { 
        return 0; 
    }
    

    @Override 
    public int getCount() {
        return fragmentList.size();
    }