android中使用dagger时片段视图寻呼机的数据绑定
基本上,我有一个应用程序,我的MainActivity有一个home片段,它有一个选项卡布局和一个带有数据绑定的viewpager。此视图寻呼机将包含两个子片段 我有一个例外:android中使用dagger时片段视图寻呼机的数据绑定,android,android-fragments,dagger-2,Android,Android Fragments,Dagger 2,基本上,我有一个应用程序,我的MainActivity有一个home片段,它有一个选项卡布局和一个带有数据绑定的viewpager。此视图寻呼机将包含两个子片段 我有一个例外: 01-28 18:46:44.692 24073-24073/app.series.com.tvshowsapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: app.series.com.tvshowsapplication, PID: 24073 j
01-28 18:46:44.692 24073-24073/app.series.com.tvshowsapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.series.com.tvshowsapplication, PID: 24073
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.series.com.tvshowsapplication/app.series.com.tvshowsapplication.ui.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager app.series.com.tvshowsapplication.ui.home.HomeFragment.getChildFragmentManager()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager app.series.com.tvshowsapplication.ui.home.HomeFragment.getChildFragmentManager()' on a null object reference
at app.series.com.tvshowsapplication.ui.home.HomeFragmentViewModel.bindViewPagerAdapter(HomeFragmentViewModel.java:24)
at app.series.com.tvshowsapplication.databinding.HomeFragmentBinding.executeBindings(HomeFragmentBinding.java:123)
at android.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:379)
at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:351)
at app.series.com.tvshowsapplication.ui.base.BaseFragment.onViewCreated(BaseFragment.java:63)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1412)
at android.app.Activity.performStart(Activity.java:7015)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2909)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
01-28 18:46:44.694 24073-24073/app.series.com.tvshowsapplication D/AppTracker: App Event: crash
这是我的HomeFragmentViewModel
@Module
public class HomeFragmentViewModel extends BaseViewModel<HomeNavigator>{
public HomeFragmentViewModel()
{
super();
}
@BindingAdapter({"bind:handler"})
public static void bindViewPagerAdapter(final ViewPager view, final HomeFragment homeFragment) {
final HomeFragmentPagerAdapter adapter = new HomeFragmentPagerAdapter(view.getContext(), homeFragment.getChildFragmentManager());
view.setAdapter(adapter);
}
@BindingAdapter({"bind:pager"})
public static void bindViewPagerTabs(final TabLayout view, final ViewPager pagerView) {
view.setupWithViewPager(pagerView, true);
}
}
@模块
公共类HomeFragmentViewModel扩展了BaseViewModel{
公共HomeFragmentViewModel()
{
超级();
}
@BindingAdapter({“bind:handler”})
公共静态void bindViewPagerAdapter(最终ViewPager视图,最终HomeFragment HomeFragment){
最终HomeFragmentPagerAdapter适配器=新的HomeFragmentPagerAdapter(view.getContext(),homeFragment.getChildFragmentManager());
view.setAdapter(适配器);
}
@BindingAdapter({“bind:pager”})
公共静态无效bindViewPagerTabs(最终表格布局视图、最终视图pagerView){
view.setupWithViewPager(pagerView,true);
}
}
应用程序尝试创建viewpager的新适配器时发生异常。
bindViewPagerAdapter函数的一个参数是HomeFragment,但绑定发生在onCreateView中,因此技术上还没有HomeFragment,这导致空指针异常。我仍然需要从某个地方经过一位儿童碎片整理经理。是否有任何选项可以在onViewCreated而不是onCreateView中调用绑定,或者我缺少了什么
这是HomeFragment的代码:
public class HomeFragment extends BaseFragment<HomeFragmentBinding, HomeFragmentViewModel> {
public static final String TAG = "HomeFragment";
@Inject
HomeFragmentViewModel mHomeFragmentViewModel;
public static HomeFragment newInstance() {
Bundle args = new Bundle();
HomeFragment fragment = new HomeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public HomeFragmentViewModel getViewModel() {
return mHomeFragmentViewModel;
}
@Override
public int getBindingVariable() {
return BR.viewModel;
}
@Override
public int getLayoutId() {
return R.layout.home_fragment;
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
}
公共类HomeFragment扩展了BaseFragment{
公共静态最终字符串TAG=“HomeFragment”;
@注入
HomeFragmentViewModel mHomeFragmentViewModel;
公共静态HomeFragment newInstance(){
Bundle args=新Bundle();
HomeFragment=新的HomeFragment();
fragment.setArguments(args);
返回片段;
}
@凌驾
公共HomeFragmentViewModel getViewModel(){
返回mHomeFragmentViewModel;
}
@凌驾
public int getBindingVariable(){
返回BR.viewModel;
}
@凌驾
public int getLayoutId(){
返回R.layout.home\u片段;
}
@凌驾
公共无效onDestroyView(){
super.onDestroyView();
}
}