修改
此问题是由ViewPager + TabInfo UI结构引起的,当AddTab
执行时,子片段会重新实现。我会相应地发布回复。
以下原始帖子
在下面的代码中,bean injectedListAdapter
未初始化(null),但@AfterInject
和@AfterView
在调用@OnActivityResult
时不会执行。
为此,
1.如何在OnActivityResult
注入后调用@Bean
?
2.我可以在OnActivityResult
之后执行@AfterViews
吗?
@EFragment(R.layout.fragment_list_main)
public class MainListFragment extends Fragment {
@Bean
InjectedListAdapter injectedListAdapter;
@AfterInject
void initValues() {
// ...
}
@AfterViews
void initViews() {
// ...
}
@OnActivityResult(CommonValue.REQUEST_CODE_A)
void onResult(int resultCode, Intent data) {
injectedListAdapter.doSomething(); // <- injectedListAdapter is null.
}
}
答案 0 :(得分:0)
抱歉@WonderCsabo
我的问题与 TabInfo + ViewPager UI结构及其子片段有关。
下面的代码很脏但很有效。
在适配器中,
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
public void addTab(ImageButton btn, Class<?> clss, Bundle args) {
TabInfo info = null;
if (mContext.getSupportFragmentManager().getFragments() != null && mContext.getSupportFragmentManager().getFragments().size() > 0) {
for (Fragment fragment : mContext.getSupportFragmentManager().getFragments()) {
if((int)btn.getTag() == 0 && fragment instanceof Fragment1_){
info = new TabInfo(fragment.getClass(), fragment, btn, args);
continue;
}
if((int)btn.getTag() == 1 && fragment instanceof Fragment2_){
info = new TabInfo(fragment.getClass(), fragment, btn, args);
continue;
}
if((int)btn.getTag() == 2 && fragment instanceof Fragment3_)
{
info = new TabInfo(fragment.getClass(), fragment, btn, args);
continue;
}
}
}
if(info == null) {
info = new TabInfo(clss, null, btn, args);
}
btn.setOnClickListener(this);
mTabs.add(info);
notifyDataSetChanged();
}
包含ViewPager的Activity,每个标签按钮的索引值为Tag
。由于我的应用程序只有静态标签页,因此可以进行硬编码工作。
@AfterViews
void initViews() { // you can put it in OnCreate()
imageButtonList.setTag(0);
imageButtonGroup.setTag(1);
imageButtonProfile.setTag(2);
mMainPagerAdapter.addTab(imageButton1, Fragment1_.class, null);
mMainPagerAdapter.addTab(imageButton2, Fragment2_.class, null);
mMainPagerAdapter.addTab(imageButton3, Fragment3_.class, null);
}