2015-10-15 56 views
3

我有一个tablayout,从Android设计支持库:选项卡中TabLayout(支持Android设计)不膨胀内容

compile 'com.android.support:design:23.0.1'

有了这个,我想填充我的标签。但我没有这样做。我可以创建标签,但他们没有夸大其各自的内容:

Current tablayout, without content.

,它应该具有LinearListView,类似于从这个框架进口ListView的参赛对象:

compile 'com.github.frankiesardo:linearlistview:[email protected]'

我尝试了很多例子,但是我没有填充每个标签。有什么建议么?

代码:

JAVA:
从主要片段:

OverviewTabLayoutPagerAdapter adapter = new OverviewTabLayoutPagerAdapter(getActivity().getSupportFragmentManager(), productDataContent, getContext()); 
     ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
     viewPager.setAdapter(adapter); 
     TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tablayout); 
     tabLayout.setupWithViewPager(viewPager); 

OverviewTabLayoutPagerAdapter:

public class OverviewTabLayoutPagerAdapter extends FragmentPagerAdapter { 

    final int PAGE_COUNT = 3; 

    private String tabTitles[] = new String[] { "REVIEWS", "VIDEOS", "DEALS" }; 
    private SearchContent productDataContent; 
    private Context context; 

    public OverviewTabLayoutPagerAdapter(FragmentManager fm, SearchContent productDataContent, Context context) { 
     super(fm); 
     this.productDataContent = productDataContent; 
     this.context = context; 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     Log.i("TAB_POSITION", String.valueOf(position)); 

     if (position == 0) { 
      return OverviewTab1Fragment.newInstance(position, productDataContent); 
     } else if (position == 1) { 
      return OverviewTab2Fragment.newInstance(position, productDataContent); 
     } else if (position == 2) { 
      return OverviewTab3Fragment.newInstance(position, productDataContent); 
     } 

     return OverviewTab1Fragment.newInstance(position, productDataContent); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 
    } 

OverviewTab *片段:(中的*表示相同的代码结构适用于每个片段):

public class OverviewTab*Fragment extends Fragment { 

    public static final String ARG_PAGE = "ARG_PAGE"; 
    public static final String PRODUCT_DATA_CONTENT = "PRODUCT_DATA_CONTENT"; 

    private int mPage; 
    private SearchContent productDataContent; 

    public static OverviewTab*Fragment newInstance(int page, SearchContent productDataContent) { 
     OverviewTab*Fragment fragment = new OverviewTab*Fragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_PAGE, page); 
     args.putSerializable(PRODUCT_DATA_CONTENT, productDataContent); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mPage = getArguments().getInt(ARG_PAGE); 
     productDataContent = (SearchContent) getArguments().getSerializable(PRODUCT_DATA_CONTENT); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.overview_tab_fragment, container, false); 
     LinearListView tabContentListView = (LinearListView) view.findViewById(R.id.product_content_linear_list_view); 

     populateOverviewTab*LinearLayout(tabContentListView, productDataContent); 

     return view; 
    } 

    private void populateOverviewTab*LinearLayout(LinearListView tabContentListView, SearchContent productDataContent) { 
     ArrayList<> productData = productDataContent.getContent(); 

     OverviewTab*ArrayAdapter overviewTab*ArrayAdapter = new OverviewVideosArrayAdapter(
       getContext(), 
       tabContentListView, 
       productData, 
       getActivity() 
     ); 

     tabContentListView.setAdapter(overviewTab*ArrayAdapter); 
    ... 

XML:
从主要片段:

... 
<LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/go_to_store_button" 
       android:orientation="vertical"> 

       <android.support.design.widget.TabLayout 
        android:id="@+id/tablayout" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        app:tabGravity="fill" /> 

       <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager" 
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_weight="1"/> 

      </LinearLayout> 
    ... 

overview_tab_fragment.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.linearlistview.LinearListView 
     android:id="@+id/product_content_linear_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:showDividers="end" 
     android:dividerPadding="5dp" 
     app:dividerThickness="2dp"> 
    </com.linearlistview.LinearListView> 

</RelativeLayout> 

回答

0

您可以更改:

@Override 
    public Fragment getItem(int position) { 
     Log.i("TAB_POSITION", String.valueOf(position)); 

    if (position == 0) { 
     return OverviewTab1Fragment.newInstance(position, productDataContent); 
    } else if (position == 1) { 
     return OverviewTab2Fragment.newInstance(position, productDataContent); 
    } else if (position == 2) { 
     return OverviewTab3Fragment.newInstance(position, productDataContent); 
    } 

    return OverviewTab1Fragment.newInstance(position, productDataContent); 
} 

对于t他:

@Override 
    public Fragment getItem(int position) { 
     Log.i("TAB_POSITION", String.valueOf(position)); 

    if (position == 0) { 
     return OverviewTab1Fragment.instantiate(context, productDataContent); 
    } else if (position == 1) { 
     return OverviewTab2Fragment.instantiate(context, productDataContent); 
    } else if (position == 2) { 
     return OverviewTab3Fragment.instantiate(context, productDataContent); 
    } 

    return OverviewTab1Fragment.instantiate(context, productDataContent); 
} 

UPDATE

这是片段数组的例子:您创建适配器

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.util.SparseArray; 
import android.view.ViewGroup; 

public class TabsViewPagerAdapter extends FragmentStatePagerAdapter { 
    private CharSequence titlesArray[]; // This will Store the Titles of the Tabs which are Going to be passed when TabsViewPagerAdapter is created 
    private Fragment tabsArray[]; 
    private SparseArray<Fragment> registeredFragments; 

    // Build a Constructor and assign the passed Values to appropriate values in the class 
    public TabsViewPagerAdapter(FragmentManager fm, CharSequence titlesArray[], Fragment[] tabsArray) { 
     super(fm); 

     this.titlesArray = titlesArray; 
     this.tabsArray = tabsArray; 
     this.registeredFragments = new SparseArray<>(); 
    } 

    //This method return the fragment for the every position in the View Pager 
    @Override 
    public Fragment getItem(int position) { 
     return tabsArray[position]; 
    } 

    // This method return the titles for the Tabs in the Tab Strip 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return titlesArray[position]; 
    } 

    // This method return the Number of tabs for the tabs Strip 
    @Override 
    public int getCount() { 
     return titlesArray.length; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Fragment fragment = (Fragment) super.instantiateItem(container, position); 
     registeredFragments.put(position, fragment); 

     return fragment; 
    } 

    public Fragment getRegisteredFragment(int position) { 
     return registeredFragments.get(position); 
    } 
} 

在Java:

String[] tabTitles = new String[]{"Tab1", "Tab2", "Tab3"}; 
Fragment[] tabsArray = new Fragment[]{new OverviewTab1Fragment(), new OverviewTab2Fragment(), new OverviewTab3Fragment()}; 

adapter = new TabsViewPagerAdapter(getSupportFragmentManager(), tabTitles, tabsArray); 

和碎片是这样的:

import android.support.v4.app.Fragment; 

public class OverviewTab1Fragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.yourFragmentLayout, container, false); 

     return v; 
    } 
} 

我希望能帮到你。

+0

不幸的是,它引发了异常:''android.support.v4.app.Fragment $ InstantiationException:无法实例化片段OverviewTab1Fragment:确保类名存在,是公共的,并且有一个公共的空构造函数。 尽管我插入的参数是正确的,包括类名,这是第二个参数。任何猜测或解决方案? –

+0

更改OverviewTab1Fragment for Fragment。 – Crash

+0

我得到了同样的例外。 :( –