[英]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.