当OnActivityResult调用时,AndroidAnnotations bean初始化

时间:2015-02-21 10:07:52

标签: java android onactivityresult android-annotations

修改

此问题是由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.
    }
}

1 个答案:

答案 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);
}