2014-06-10 86 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