Android 如果静态创建片段,如何等待绑定服务
我有一个问题。我在活动布局中静态定义了一个片段:Android 如果静态创建片段,如何等待绑定服务,android,service,bind,fragment,Android,Service,Bind,Fragment,我有一个问题。我在活动布局中静态定义了一个片段: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation=
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<fragment
android:id="@+id/tab_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.trilobitsol.one.TabFragmentNew" >
</fragment>
</LinearLayout>
然而,在片段的onCreateView中,我有依赖于活动中获得的服务的代码,问题是在实际接收服务之前调用了片段的onCreateView。如何克服这个恼人的问题
提前谢谢。
加多
已解决:
多亏了@Karakuri advice,我没有在TabFragmentNew.onCreateView()中创建选项卡片段(其中onCreateView()中是服务相关代码),而是将其移动到单独的方法中,在onDeviceConnection(…)中调用该方法 片段中依赖于您的活动的任何代码都应至少推迟到片段的onActivityCreated()
回调。在onCreateView()中展开(或创建)视图层次结构时,可以存储对需要更新的视图的引用。
编辑:
请尝试以下操作之一:
getActivity().bindService(…)
onServiceConnected()
回调时,让它找到您的片段并对其调用一些公共方法public void serviceConnected(/*any args you want*/) {
// ...
}
public void serviceDisonnected(/*any args you want*/) {
// ...
}
活动代码:
private ServiceConnection serviceConn = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder binder) {
service = ((AlarmService.AlarmBinder)binder).getService();
TabFragmentNew fragment = (TabFragmentNew) getFragmentManager().findFragmentById(R.id.tab_fragment);
if (fragment != null) fragment.serviceConnected(...);
}
@Override
public void onServiceDisconnected(ComponentName name) {
service = null;
TabFragmentNew fragment = (TabFragmentNew) getFragmentManager().findFragmentById(R.id.tab_fragment);
if (fragment != null) fragment.serviceDisconnected(...);
};
};
片段中任何依赖于活动的代码都应该至少推迟到片段的onActivityCreated()
回调。在onCreateView()中展开(或创建)视图层次结构时,可以存储对需要更新的视图的引用。
编辑:
请尝试以下操作之一:
getActivity().bindService(…)
onServiceConnected()
回调时,让它找到您的片段并对其调用一些公共方法public void serviceConnected(/*any args you want*/) {
// ...
}
public void serviceDisonnected(/*any args you want*/) {
// ...
}
活动代码:
private ServiceConnection serviceConn = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder binder) {
service = ((AlarmService.AlarmBinder)binder).getService();
TabFragmentNew fragment = (TabFragmentNew) getFragmentManager().findFragmentById(R.id.tab_fragment);
if (fragment != null) fragment.serviceConnected(...);
}
@Override
public void onServiceDisconnected(ComponentName name) {
service = null;
TabFragmentNew fragment = (TabFragmentNew) getFragmentManager().findFragmentById(R.id.tab_fragment);
if (fragment != null) fragment.serviceDisconnected(...);
};
};
是的,我知道,但是如果片段是在布局中静态定义的,我不控制它何时膨胀。接受:)可能对一些深夜开发人员有帮助是的,我知道,但是如果片段是在布局中静态定义的,我不控制它何时膨胀。接受:)可能对一些深夜开发人员有帮助