1

由於某種原因,當我調用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。任何幫助將不勝感激。

+0

什麼是'ContentFragment()'? –

+0

ContentFragment()是一個片段的實例,例如,我會創建一個名爲ContentFragment的新類並擴展Fragment。 –

回答

2

adapter被聲明爲PagerAdapter,而不是ViewPagerAdapter。因此,您可以在adapter上使用的唯一方法是爲PagerAdapter定義的方法。編譯器不知道adapter實際上是那個時候的ViewPagerAdapter--我可以告訴它,因爲我看到上面的賦值爲adapter = new ViewPagerAdapter(...),但是編譯器不允許注意到(那些是該語言)。相反:

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager()); 

使用viewPagerAdapter打電話給你addFrag方法,並最終分配adapter = viewPagerAdapter;

+0

謝謝@ajb!你已經解決了我的問題,我不相信我用PagerAdapter替換ViewPagerAdapter! –

1

變化private PagerAdapter adapter;private ViewPagerAdapter adapter;

OR

類型轉換適配器ViewPagerAdapter然後調用addFlag

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

感謝您的評論,類型演員有一天可以派上用場。 –