如何从外部包中获取片段

时间:2014-02-21 13:34:57

标签: android android-fragments

问题:我有MainApp和FrameLayout,我可以从MainApp轻松放入MainFragments.class。我还有一个带有PlugInApp的外部包,其中我有一些其他的PlugInFragment.class。我需要把这个PlugInFragment.class放到MainApp FrameLayout中。看似简单,但事实并非如此。

我无法从外部程序包在MainApp中创建片段对象。真的需要帮助。请。

.. ..更新

好的,我尝试使用DexClassLoader加载PlugiFragment.class。通常,它正在工作..我可以轻松运行其他类,或类的一些方法,但如果我尝试加载PluginFragment,我有错误: - 无法解析我的PlugInFragment的超类,这是从基本Fragment extendet。我认为这是因为Fragment类在andrid-support-v4.jar中,它就像一个私有lib,而不是主android.jar。我尝试重新加载,清理,刷新和其他“跳舞”方法 - 根本没有帮助。有任何想法吗?

.. ..光洁度

好的,我做到了! YEEEH !!

首先我停止使用来自andrid.support.v4的Fragment,我使用来自android.app的常规Fragment,这消除了“无法解决超类错误”。然后我在我的PluginFragment中进行了一些更改:

      @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    int fragment_layoytRID = 0;

    try {

        //TODO in layout should not use string/color resourses

        fragment_layoytRID = container
                .getContext()
                .getPackageManager()
                .getResourcesForApplication(parkageName)
                .getIdentifier("plagin_fragment", "layout",
                        parkageName);

        Log.w("PLUGIN", "fragment_layoytRID: " + fragment_layoytRID);

    } catch (NameNotFoundException e) {

        e.printStackTrace();
    }

    final XmlResourceParser parser = container.getContext()
            .getPackageManager()
            .getXml(parkageName, fragment_layoytRID, null);


    return inflater.inflate(parser, container, false);


}

这是因为布局从外部mainApp充气..而且它的工作..唯一的问题,在这种情况下布局没有找到@string / @color和其他资源..

1 个答案:

答案 0 :(得分:0)

FrameLayout内,你需要像这样添加片段:

<fragment android:name="your.namespace.PlugInFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

请注意,您必须将your.namespace.PlugInFragment更改为其命名空间。