简体   繁体   English

调用函数/方法时出错?

[英]Error when invoking a function/method?

For some reason I am getting an error when i invoke the addFrag function/method to populate my fragment and string title. 出于某种原因,当我调用addFrag函数/方法来填充我的片段和字符串标题时,我收到错误。 I am creating a simple ViewPager with an adapter. 我正在创建一个带适配器的简单ViewPager This is all in a fragment by the way. 顺便说一下,这一切都在片段中。 Here is the code: 这是代码:

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);
    }

}

When I try to type adapter.addFrag(new ExampleFragment(), "Hello"); 当我尝试输入adapter.addFrag(new ExampleFragment(), "Hello"); I get an error cannot resolve method addFrag. 我得到一个错误无法解析方法addFrag。 Any help will be appreciated. 任何帮助将不胜感激。

adapter is declared as a PagerAdapter , not a ViewPagerAdapter . adapter被声明为PagerAdapter ,而不是ViewPagerAdapter Therefore the only methods you can use on adapter are the ones defined for PagerAdapter . 因此,您可以在adapter上使用的唯一方法是为PagerAdapter定义的PagerAdapter The compiler doesn't know that adapter will actually be a ViewPagerAdapter at that point--I can tell that it will, because I saw the assignment adapter = new ViewPagerAdapter(...) up above, but the compiler isn't allowed to notice that (those are the rules of the language). 编译器当时不知道该adapter实际上是一个ViewPagerAdapter - 我可以告诉它,因为我在上面看到了赋值adapter = new ViewPagerAdapter(...) ,但编译器不允许注意(那些是语言的规则)。 Instead: 代替:

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());

Use viewPagerAdapter to call your addFrag methods, and eventually assign adapter = viewPagerAdapter; 使用viewPagerAdapter调用addFrag方法,最后分配adapter = viewPagerAdapter; .

Change private PagerAdapter adapter; 更改private PagerAdapter adapter; to private ViewPagerAdapter adapter; private ViewPagerAdapter adapter;

OR 要么

Type cast adapter to ViewPagerAdapter and then call addFlag 将转换适配器键入ViewPagerAdapter ,然后调用addFlag

((ViewPagerAdapter)adapter).addFlag(new ContentFragment(), "ONE");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM