Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以访问片段';从Activity';s onCreate_Android_Android Fragments - Fatal编程技术网

Android 是否可以访问片段';从Activity';s onCreate

Android 是否可以访问片段';从Activity';s onCreate,android,android-fragments,Android,Android Fragments,正如标题所说:是否可以在活动的onCreate()方法中初始化当前可见的片段和所有UI元素? 我使用处理业务逻辑和UI事件的独立控制器类实现了模型、视图和控制器的分离。因此,它们需要对当前片段的引用。这些控制器在活动的onCreate()方法中初始化,因此我需要该方法中的初始化片段 我欢迎任何建议:) 编辑: 添加一些代码以更好地理解: 我正在使用dagger进行依赖项注入,并希望在onCreate()方法中实现这一点。正如我之前所说,我的控制器需要一个映射视图元素。这就是为什么我想初始化一个带

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

我欢迎任何建议:)

编辑:

添加一些代码以更好地理解: 我正在使用dagger进行依赖项注入,并希望在onCreate()方法中实现这一点。正如我之前所说,我的控制器需要一个映射视图元素。这就是为什么我想初始化一个带有mapView元素的片段

MapActivity#onCreate(Bundle):

activity_layout.xml

<android.support.v4.widget.DrawerLayout>
    <FrameLayout
        android:id="@+id/activity_container"
        ... />
    <ListView .../>
</android.support.v4.widget.DrawerLayout>
<RelativeLayout>
    <org.osmdroid.map.MapView 
        android:id"@+id/mapview"
        ... />
    <Button .../>
</RelativeLayout>

fragment_layout.xml

<android.support.v4.widget.DrawerLayout>
    <FrameLayout
        android:id="@+id/activity_container"
        ... />
    <ListView .../>
</android.support.v4.widget.DrawerLayout>
<RelativeLayout>
    <org.osmdroid.map.MapView 
        android:id"@+id/mapview"
        ... />
    <Button .../>
</RelativeLayout>

第二次编辑:
所以这似乎是不可能的。。。是的,对于下一票^^

您可以在活动中创建一个接口,并在片段上实现它…

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

访问片段视图的正确位置是片段本身。考虑将控制器分配放入其生命周期内的片段中,如<代码> OnCeCaleVIEW()/<代码>或<代码> OnVIEW()/代码> < /P>
可以使用或在活动生命周期中运行
super.onStart()
后隐式运行排队的片段事务。之后,片段视图可以在活动视图层次结构中访问。

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

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

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

我知道让您的片段从主活动访问其视图的想法是不好的。但是,此解决方案可能会满足您的需要。

这将永远阻止UI线程,应用程序将被“应用程序无响应”杀死。@laalto我认为它将在while循环中停留一段时间,直到活动收到片段
rootView
。它不会永远阻止应用程序。我不知道你的意思是不是说不能保证从片段返回rootView。您的看法是什么?片段事务将在您阻止的同一UI线程上执行。由于Android仅在一个线程上运行,因此不会创建该视图。你会永远封锁这个线索的,我很抱歉,但这对我来说太神秘了;)你们知道接口吗?如何创建和使用它?是的,我知道接口和如何实现它们。你能详细说明一下你要做什么吗?1.在Oncreate中创建一个片段…2。实现此onFragment..3.在fragment类内的实现中更新片段UI..很抱歉,我仍然不理解您的方法是什么。无法在片段中执行此操作,因为活动是注入的起点。。。我认为还有另一种选择,而不是使用来自片段的回调。这对我来说似乎是个笨拙的解决方案…你想做的是不可能的。再次检查片段和活动的生命周期。关于片段和活动的生命周期如何交互的信息很少,因此我认为在创建片段时会正确调用onCreateView()。。。