【问题标题】:Tabs in TabLayout are not displayingTabLayout 中的选项卡不显示
【发布时间】:2017-06-26 17:51:00
【问题描述】:

我需要在容器活动中的选项卡布局中显示选项卡,但不知何故选项卡没有显示。如果有帮助的话,这个项目还有三个活动,分别是登录活动、地图活动、注册活动。

注意:地图片段不同于地图活动。

容器.java

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_container);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(viewPager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });
}

private  void setupViewPager(ViewPager viewPager) {

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    adapter.addFragment(new MapFragment(), "Map");
    adapter.addFragment(new Chat(),"Chat");

    viewPager.setAdapter(adapter);

}

class ViewPagerAdapter extends FragmentPagerAdapter{

    private List<Fragment> mFragment = new ArrayList<>();
    private List<String> mFragmentTitle = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) { return null; }

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

    public void addFragment(Fragment fragment, String fragmentTitle){

        mFragment.add(fragment);
        mFragmentTitle.add(fragmentTitle);

    }
    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitle.get(position);
    }
}

activity_container.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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="wrap_content"
        android:textAlignment="center"
        android:background="@android:color/darker_gray"
        app:layout_scrollFlags="scroll|enterAlways"
        android:minHeight="22dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>


    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        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>

聊天片段 聊天.java

public class Chat extends Fragment {

public Chat(){

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_chat, container,false);
}

}

activity_chat.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_chat"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.downy.gpslocation.Chat">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hey there this is chat"
    android:layout_centerInParent="true"/>
</RelativeLayout>

提前感谢您的帮助。

【问题讨论】:

    标签: android android-layout android-fragments android-tablayout android-appbarlayout


    【解决方案1】:

    你应该有:

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

    因为你返回的是0,说明适配器是空的。

    还有:

    @Override
    public Fragment getItem(int position) { 
        return mFragment.get(position); 
    }
    

    返回给定位置的正确片段,不为空。

    【讨论】:

      【解决方案2】:

      我在你的代码中看到的东西 ViewPagerAdapter 得到了 getCount return 0 和 getItem return null

      【讨论】:

      • 这些是覆盖方法,我没有使用它们,所以它们返回 0 或 null。
      • 使用它们返回适配器计数和您要显示的片段,getPageTitle 返回您要显示的标题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多