为什么标签在片段内不可见?

时间:2014-12-03 07:31:09

标签: android fragment navigation-drawer swipeview

在我的应用中,我想使用片段内四个标签的滑动视图。四个标签每个都包含不同的片段,并且所有四个片段通过从右向左滑动或反之亦然而滑动。片段工作正常,但片段中的标签不可见。任何人都有任何解决方案。在此先感谢:)

这是包含标签的主要片段: -

public class DashboardTabFragment extends Fragment implements ActionBar.TabListener {

private static final String ARG_SECTION_NUMBER = "arg_section_number";
private String[] tabTitle = {"Cleanness", "Product Display", "Hygiene", "Asm Visits"};

public static DashboardTabFragment newInstance(int position) {
    DashboardTabFragment fragment = new DashboardTabFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, position);
    fragment.setArguments(args);
    return fragment;
}

private ViewPager viewPager;

public DashboardTabFragment() {
}

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

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_dashboard_tab, container, false);
    setHasOptionsMenu(true);
    ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
    assert actionBar != null;
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    viewPager = (ViewPager) rootView.findViewById(R.id.pager);
    TabPageAdapter tabPageAdapter = new TabPageAdapter(getActivity().getSupportFragmentManager(), getActivity());
    viewPager.setAdapter(tabPageAdapter);
    for (String aTabTitle : tabTitle)
        actionBar.addTab(actionBar.newTab().setText(aTabTitle).setTabListener(this));
    return rootView;
}

这是片段的适配器: -

    public class TabPageAdapter extends FragmentPagerAdapter {
Context context;
public TabPageAdapter(FragmentManager fm,Context context) {
    super(fm);
    this.context = context;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            return new CleannessChartFragment(context);
        case 1:
            return new ProductDisplayChartFragment(context);
        case 2:
            return new HygieneChartFragment(context);
        case 3:
            return new AsmVisitsChartFragment(context);
    }

    return null;
}

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我使用了TabHager的TabHost选项卡。

这是我的片段: -

package com.itpp.trt;

import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TabHost;

public class DashboardTabFragment extends Fragment implements ViewPager.OnPageChangeListener {

private static final String ARG_SECTION_NUMBER = "arg_section_number";
private ViewPager mViewPager;
private TabHost tabHost;
private String[] tabSpec = {"Tab_1", "Tab_2", "Tab_3", "Tab_4"};
private String[] tabTitle = {"Cleanness", "Product Display", "Hygiene", "Asm Visits"};


private TabHost.TabContentFactory mFactory = new TabHost.TabContentFactory() {

    @Override
    public View createTabContent(String tag) {
        View v = new View(getActivity());
        v.setMinimumHeight(0);
        return v;
    }
};

public static DashboardTabFragment newInstance(int position) {
    DashboardTabFragment fragment = new DashboardTabFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, position);
    fragment.setArguments(args);
    return fragment;
}

public DashboardTabFragment() {
    tabHost = null;
}

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

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_dashboard_tab, container, false);

    mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
    mViewPager.setAdapter(new TabPageAdapter(getChildFragmentManager(), getActivity()));
    tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost);
    tabHost.setup();
    mViewPager.setOnPageChangeListener(this);
    for (int i = 0; i < tabSpec.length; i++) {
        tabHost.addTab(tabHost.newTabSpec(tabSpec[i]).setIndicator(tabTitle[i]).setContent(mFactory));
    }

    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {

            if (tabId.equals("Tab_1")) {
                mViewPager.setCurrentItem(0);
            } else if (tabId.equals("Tab_2")) {
                mViewPager.setCurrentItem(1);
            } else if (tabId.equals("Tab_3")) {
                mViewPager.setCurrentItem(2);
            } else if (tabId.equals("Tab_4")) {
                mViewPager.setCurrentItem(3);
            }
        }

    });
    return rootView;
}


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    ((MyActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
    tabHost.setCurrentTab(position);
}

@Override
public void onPageScrollStateChanged(int state) {

}

@Override
public void onDetach() {
    super.onDetach();

}
}

这是我的tabpager适配器: -

package com.itpp.trt;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;

/**
 * Created by biswajit on 28-11-14.
 */
public class TabPageAdapter extends FragmentStatePagerAdapter{
Context context;
public TabPageAdapter(FragmentManager fm,Context context) {
    super(fm);
    this.context = context;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            return new CleannessChartFragment(context);
        case 1:
            return new ProductDisplayChartFragment(context);
        case 2:
            return new HygieneChartFragment(context);
        case 3:
            return new AsmVisitsChartFragment(context);
    }

    return null;
}

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

}

希望这有助于其他人。谢谢:))