正如标题所说:是否有可能获得当前可见的片段,其中所有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 ^^
答案 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;
}
我知道让你的片段从主要活动访问其视图的想法很糟糕。然而,这个解决方案可能会给你你想要的东西。