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);
}
编辑
此问题是由于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);
}