Android 夏洛克碎片中的内容

Android 夏洛克碎片中的内容,android,actionbarsherlock,fragment,Android,Actionbarsherlock,Fragment,在我的班级里,我有这样一门课: class TabFactory implements TabContentFactory { private final Context mContext; public TabFactory(Context context) { mContext = context; } public View createTabContent(String tag) {

在我的班级里,我有这样一门课:

class TabFactory implements TabContentFactory {

        private final Context mContext;

        public TabFactory(Context context) {
            mContext = context;
        }

        public View createTabContent(String tag) {
            View v = new View(mContext);
            v.setMinimumWidth(0);
            v.setMinimumHeight(0);
            return v;
        }

    }
下面是错误:

private static void AddTab(
        SherlockFragmentActivity activity, TabHost tabHost,
        TabHost.TabSpec tabSpec, TabInfo tabInfo) {
    // TODO Auto-generated method stub

    tabSpec.setContent(activity.new TabFactory(activity));
实际上,我这里有一个错误:

SherlockFragmentActivity.TabFactory cannot be resolved to a type

我知道这个方法在SherlockFragmentActivity中有效,但它在SherlockFragment中是如何工作的

我猜你的班级
黎巴嫩
扩展了
夏洛克碎片活动

如果是这样,则出现类错误的原因是传递到
AddTab()
activity
类型是
sherlockfragmentactivity
。编译器不知道您实际上正在传递
leban
的实例,因此无法解析嵌套类
TabFactory
。这就是错误

有两种解决办法。首先,您可以修改
AddTab()
签名以获取子类,例如

private static void AddTab(
    Lebanon activity, TabHost tabHost,
    TabHost.TabSpec tabSpec, TabInfo tabInfo) {

    tabSpec.setContent(activity.new TabFactory(activity));

    // ... other code
}
另一种方法是保持签名不变,但向活动添加强制转换,即

tabSpec.setContent(((Lebanon) activity).new TabFactory(activity));

第一个解决方案显然要简单得多,并且不会在运行时抛出
ClassCastException
,因此如果可以,请选择它。

我在扩展SherlockFragment而不是sherlockFragmentActivity。我发布的上述代码适用于sherlockFragmentActivity(您的第一个解决方案与我发布的解决方案相同)好的。。。因此,如果您的类
leban
扩展了
SherlockFragment*,您希望传递什么到
AddTab()`?不,我的第一个解决方案与您的代码不同。检查参数类型。