[英]Error when invoking a function/method?
出于某种原因,当我调用addFrag函数/方法来填充我的片段和字符串标题时,我收到错误。 我正在创建一个带适配器的简单ViewPager
。 顺便说一下,这一切都在片段中。 这是代码:
public class HomeFragment extends Fragment {
private View view;
private ViewPager viewPager;
private TabLayout tabLayout;
private PagerAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup viewGroup,
@Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.home_fragment, viewGroup, false);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
setUpViewPager(viewPager);
tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return view;
}
private void setUpViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFrag(new ContentFragment(), "ONE");
adapter.addFrag(new ContentFragment(), "TWO");
adapter.addFrag(new ContentFragment(), "THREE");
viewPager.setAdapter(adapter);
}
}
class ViewPagerAdapter extends FragmentPagerAdapter{
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> tabTitles = new ArrayList<>();
//Default Fragment Constructor
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
public void addFrag(Fragment fragment, String title){
fragmentList.add(fragment);
tabTitles.add(title);
}
@Override
public CharSequence getPageTitle(int position){
return tabTitles.get(position);
}
}
当我尝试输入adapter.addFrag(new ExampleFragment(), "Hello");
我得到一个错误无法解析方法addFrag。 任何帮助将不胜感激。
adapter
被声明为PagerAdapter
,而不是ViewPagerAdapter
。 因此,您可以在adapter
上使用的唯一方法是为PagerAdapter
定义的PagerAdapter
。 编译器当时不知道该adapter
实际上是一个ViewPagerAdapter
- 我可以告诉它,因为我在上面看到了赋值adapter = new ViewPagerAdapter(...)
,但编译器不允许注意(那些是语言的规则)。 代替:
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
使用viewPagerAdapter
调用addFrag
方法,最后分配adapter = viewPagerAdapter;
。
更改private PagerAdapter adapter;
private ViewPagerAdapter adapter;
要么
将转换适配器键入ViewPagerAdapter
,然后调用addFlag
((ViewPagerAdapter)adapter).addFlag(new ContentFragment(), "ONE");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.