AndroidAnnotations bean 在调用 OnActivityResult 时初始化

AndroidAnnotations bean initialize when OnActivityResult called

编辑

此问题是由于ViewPager+TabInfo UI结构,AddTab执行时重新实例化了子片段。我post相应地回复了。

原创 POST 下面

在下面的代码中,bean injectedListAdapter 未初始化(null),而且 @AfterInject@AfterView 在调用 @OnActivityResult 时也未执行。

为此,
1. 如何在 @Bean 注入后调用 OnActivityResult
2. 而且,我可以在 @AfterViews 之后执行 OnActivityResult 吗?

@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.
    }
}

对不起@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);
}