是否可以从激活的onCreate访问片段的UI元素

时间:2014-06-13 07:21:57

标签: android android-fragments

正如标题所说:是否有可能获得当前可见的片段,其中所有UI元素都在活动的onCreate()方法中初始化? 我正在使用处理业务逻辑和UI事件的独立控制器类实现模型,视图和控制器的分离。因此,他们需要参考当前片段。这些控制器在活动的onCreate()方法中初始化,因此我需要在该方法中初始化的片段。

我欢迎任何建议:)

编辑:

添加一些代码以便更好地理解: 我使用dagger进行依赖注入,并希望在onCreate()方法中执行此操作。正如我之前所说,我的控制器需要一个mapView元素。这就是为什么我想要一个初始化了mapView元素的片段。

MapActivity#的onCreate(捆绑):

public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.activity_layout);

    MyMapFragment fragment = new MyMapFragment();
    getFragmentManager().beginTransaction()
        .add(R.id.activity_container, fragment, "fragment")
        .commit();

    ObjectGraph.create(new Module(fragment.getMapView())).inject(this);
}    

activity_layout.xml

<android.support.v4.widget.DrawerLayout>
    <FrameLayout
        android:id="@+id/activity_container"
        ... />
    <ListView .../>
</android.support.v4.widget.DrawerLayout>

fragment_layout.xml

<RelativeLayout>
    <org.osmdroid.map.MapView 
        android:id"@+id/mapview"
        ... />
    <Button .../>
</RelativeLayout>

2ND编辑: 所以看起来这是不可能的......对于downvote ^^

3 个答案:

答案 0 :(得分:1)

你可以在活动中创建一个接口并在Fragment上实现它......

答案 1 :(得分:1)

默认情况下,没有。在活动onCreate()运行时,片段尚未附加到活动。

访问片段视图的正确位置在片段本身中。考虑将控制器分配放在片段的生命周期中,例如onCreateView()onViewCreated()

可以使用executePendingTransactions()显式运行排队的片段事务,或者在活动生命周期中运行super.onStart()之后隐式运行。之后,可以在活动视图层次结构中访问片段视图。

答案 2 :(得分:-1)

在您的onCreate方法中添加以下内容(我使用textview作为示例):

while (fragment.getView() == null) {

        }
rootView = fragment.getView();
TextView myView = (TextView) rootView.findViewById(R.id.text_view);

请确保在片段rootView方法中返回onCreateView,如下所示:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_activity,
                container, false);
        return rootView;
    }

我知道让你的片段从主要活动访问其视图的想法很糟糕。然而,这个解决方案可能会给你你想要的东西。