0

在我的班黎巴嫩我有这个班:

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 中是如何工作的?!

4

1 回答 1

0

我猜你的课Lebanon扩展了SherlockFragmentActivity

如果是这样,您收到类错误的原因是因为activity传入的类型AddTab()SherlockFragmentActivty. 编译器不知道您实际上是在传递一个实例,Lebanon因此无法解析嵌套类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在运行时抛出 a,所以如果可以的话,请选择它。

于 2013-08-05T20:11:30.163 回答