【发布时间】:2018-03-28 15:48:23
【问题描述】:
我有一个 viewPager 活动,它使用自定义 FragmentPagerAdapter 创建多个片段。
我需要获取List<Audio> audioList 并在我的fragment 中使用它。
这是我的MainActivity 的一小部分,我在其中创建了fragments。我认为不需要 MainActivity 的其余代码来回答这个问题。
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
PagerAdapter pagerAdapter =
new PagerAdapter(getSupportFragmentManager(), MainActivity.this, audioList);
viewPager.setAdapter(pagerAdapter);
// Give the TabLayout the ViewPager
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
// Iterate over all tabs and set the custom view
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
tab.setCustomView(pagerAdapter.getTabView(i));
}
这是我的自定义FragmentPagerAdapter:
public class PagerAdapter extends FragmentPagerAdapter {
String tabTitles[] = new String[] { "Recommended", "Popular", "Rock", "Pop", "Blues", "Chill" };
Context context;
private List<Audio> audioList;
public PagerAdapter(FragmentManager fm, Context context, List<Audio> audioList) {
super(fm);
this.context = context;
this.audioList = audioList;
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new BlankFragment();
case 1:
return new BlankFragment();
case 2:
return new BlankFragment();
case 3:
return new BlankFragment();
case 4:
return new BlankFragment();
case 5:
return new BlankFragment();
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
public View getTabView(int position) {
View tab = LayoutInflater.from(context).inflate(R.layout.custom_tab, null);
TextView tv = (TextView) tab.findViewById(R.id.custom_text);
tv.setText(tabTitles[position]);
return tab;
}
}
我需要在这里将List<Audio> audioList 放入我的片段中:
public class BlankFragment extends Fragment {
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.content_view, container, false);
//Get auidoList here
return rootView;
}
将来我还需要得到tab 的title,但我猜我会得到它类似于audioList。如果不是,那么我还可以使用帮助来获取 tab 标题。
此外,如果代码样式有误,我也很乐意收到一些反馈。
【问题讨论】:
-
你的清单可以打包吗?
-
@Chol 如果我理解 parcelable 正确,那么不,不是。该列表由音频对象组成,是一个 ArrayList。但我可能对 parcelable 的理解有误。
-
音频对象只包含可打包的数据(String, int ...)?
-
@Chol 是的,
Audio(String data, String title, String album, String artist) -
看卢克的回答
标签: android android-fragments android-viewpager fragmentpageradapter