Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匕首2安卓碎片_Java_Android_Android Fragments_Dagger 2 - Fatal编程技术网

Java 匕首2安卓碎片

Java 匕首2安卓碎片,java,android,android-fragments,dagger-2,Java,Android,Android Fragments,Dagger 2,我的演示者在MVP体系结构的片段中尝试使用Dagger 2时为空。我想知道在片段中实现演示者的正确方法。这是我的密码: FeedFragment.java public class FeedFragment extends Fragment implements FeedFragmentView, FeedAdapter.OnCapsuleClickListener { private OnFragmentInteractionListener mListener;

我的演示者在MVP体系结构的片段中尝试使用Dagger 2时为空。我想知道在片段中实现演示者的正确方法。这是我的密码:

FeedFragment.java

public class FeedFragment extends Fragment implements FeedFragmentView,
        FeedAdapter.OnCapsuleClickListener {

    private OnFragmentInteractionListener mListener;
    private Unbinder unbinder;

    @Inject FeedFragmentPresenter mFeedFragmentPresenter;
    @Inject FeedAdapter mFeedAdapter;

    @BindView(R.id.news_feed_list) RecyclerView mRecyclerView;

    public FeedFragment() {
        // Required empty public constructor
    }

    public static FeedFragment newInstance() {
        return new FeedFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_feed, container, false);
        unbinder = ButterKnife.bind(this, rootView);

        mRecyclerView.setAdapter(mFeedAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(
                getActivity(), LinearLayoutManager.VERTICAL, false));
        mFeedFragmentPresenter.attachView(this);    // NULL ERROR HERE
        mFeedFragmentPresenter.loadCapsules();

        return rootView;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
        mFeedFragmentPresenter.detachView();
    }

    @Override
    public void show(List<CapsuleWrapper> capsules) {
        mFeedAdapter.setCapsules(capsules);
        mFeedAdapter.notifyDataSetChanged();
    }

    @Override
    public void showError() {
        DialogFactory.networkErrorDialog(getActivity(),
                R.string.dialog_title_network_error)
                .show();
    }
}
FragmentModule.java

@Module
public class FragmentModule {

    @Provides
    @PerFragment
    public FeedFragmentPresenter providePresenter(DataManager dataManager){
        return new FeedFragmentPresenter(dataManager);
    }

}


如果您使用的是片段,那么不要忘记在onAttach方法中注入您的片段实例。

要注入依赖项的DaggerComponent生成器在哪里?我已经为MVP体系结构中的Dagger 2准备了一个示例,您可以遵循此示例
public class BasePresenter<T extends View> implements Presenter<T> {

    private T mView;

    @Override
    public void attachView(T view) {
        mView = view;
    }

    @Override
    public void detachView() {
        mView = null;
    }

    public boolean isViewAttached() {
        return mView != null;
    }

    public T getView() {
        return mView;
    }

    public void checkViewAttached() {
        if (!isViewAttached()) throw new ViewNotAttachedException();
    }

    public static class ViewNotAttachedException extends RuntimeException {
        public ViewNotAttachedException() {
            super("Please call Presenter.attachView(View) before" +
                    " requesting data to the Presenter");
        }
    }
}
public interface FeedFragmentView extends View {

    void show(List<CapsuleWrapper> capsules);

    void showEmpty();

    void showError();

}
@PerFragment
@Component( modules = {FragmentModule.class}, dependencies = {ApplicationComponent.class} )
public interface FragmentComponent {

    void inject(FeedFragment fragment);

}
@Module
public class FragmentModule {

    @Provides
    @PerFragment
    public FeedFragmentPresenter providePresenter(DataManager dataManager){
        return new FeedFragmentPresenter(dataManager);
    }

}