2014-06-10 122 views
0

我是Android新手,在線學習了一些教程。但是,自教程發佈以來,片段似乎發生了變化。現在我陷入了一個我似乎無法解決的錯誤。我在getItem方法的返回類型上收到錯誤「返回類型與FragmentPagerAdapter.getItem(int)不兼容」。任何想法爲什麼?如果我將返回類型更改爲FriendsFragment,則會出現相同的錯誤。如果我將返回類型更改爲Fragment,那麼我會在方法中出現錯誤。請幫忙!先謝謝了。以下是我的代碼:Android Java返回類型錯誤

package com.erinkabbash.ribbit; 

import java.util.Locale; 

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.Context; 
import android.support.v13.app.FragmentPagerAdapter; 
import android.support.v4.app.ListFragment; 

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    protected Context mContext; 

    public SectionsPagerAdapter(Context context, FragmentManager fm) { 
     super(fm); 
     mContext = context; 
    } 

    @Override 
    public InboxFragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class 
     // below). 

     switch(position){ 
      case 0: 
       return new InboxFragment(); 
      case 1: 
       return new FriendsFragment(); 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
      case 0: 
       return mContext.getString(R.string.title_section1).toUpperCase(l); 
      case 1: 
       return mContext.getString(R.string.title_section2).toUpperCase(l); 

     } 
     return null; 
    } 
} 

回答

3

除非簽名完全匹配,否則不能進行覆蓋。將getItem從返回InboxFragment更改爲返回Fragment。

+0

你好,感謝您的回覆!我刪除了覆蓋,並改變了返回類型,但後來我得到的方法在我的每個案例說明..「類型不匹配:不能從InboxFragment轉換爲碎片」,快速修復建議我改變我的方法的Fragment返回類型到InboxFragment,讓我回到我開始的地方。 – ErinSKabbash

+0

您的收件箱片段是否源自片段?如果沒有,你可能有很大的問題。如果是這樣,那應該是完全合法的。 –

+0

InboxFragment設置爲擴展ListFragment – ErinSKabbash

1

你是返回一個類型InboxFragment和int的代碼return new FriendsFragment();行,它不會接受它,因爲它不是一個類型的InboxFragment但它是一個類型的Fragment因此而不是從getItem方法改變其返回InboxFragmentFragment

例如:

public Fragment getItem(int position) { 
+0

你好,感謝您的發佈!我按照你的說法做了,但是在我的每個案例陳述後,我都會在方法內部發現錯誤。「類型不匹配:無法從InboxFragment轉換爲Fragment」,快速修復建議將我的方法的Fragment返回類型更改爲InboxFragment,我回到我開始的地方。 – ErinSKabbash

+0

@ErinSKabbash是InboxFragment是否擴展了片段? –

+0

InboxFragment設置爲擴展ListFragment – ErinSKabbash

1

是您的類InboxFragment和FriendsFragment延伸片段(android.support.v4.app.Fragment)? android.support.v4.app.Fragmentandroid.app.Fragment彼此不兼容,FragmentPagerAdapter僅支持android.support.v4.app.Fragment。 試試吧,它應該可以工作..

+0

我改變了我的導入到v4,它似乎解決了這個問題..但現在我得到的錯誤:「構造函數FragmentPagerAdapter(FragmentManager)未定義」超級(fm);行 – ErinSKabbash

+0

,如果它是android.app.ListFragment,則使用android.support.v4.app.ListFragment。 v4是爲了支持冰淇淋夾心餅 – ppuskar

+0

使用android.support.v4.app.FragmentManager之前建立的應用程序。 在FragmentManager中fragmentManager = mActivity.getSupportFragmentManager(); – ppuskar