首页 文章

MVP - 视图中的数据不显示

提问于
浏览
0

我想将MVP模式添加到我的项目中 . 我为视图(ContactPresenter)创建了BasePresenter,PresenterFactory,presenter,但视图中的数据不显示 . 我做错了什么?或者可能是什么问题?

这是BasePresenter类:

public abstract class  BasePresenter<V> {

    protected V view;
    private CompositeSubscription compositeSubscription=new CompositeSubscription();

    public void bindView(V view){
        this.view=view;
    }

    public void unBindView(){
        this.view=null;
        compositeSubscription.clear();
    }

    protected void addSubscription(Subscription subscription){
        compositeSubscription.add(subscription);
    }
}

Class PresenterFactory:

public class PresenterFactory {

    private final BaseApi baseApi;
    private static PresenterFactory presenterFactory;
    private PresenterFactory(BaseApi baseApi) {
        this.baseApi = baseApi;
    }
    public static void create(BaseApi baseApi){
        if(presenterFactory ==null){
            presenterFactory =new PresenterFactory(baseApi);
        }
    }
    public static PresenterFactory getInstance() {
        return presenterFactory;
    }
    public BasePresenter get(String tag) {
        if (tag.equals(ContactPresenter.TAG)) {
            return new ContactPresenter(baseApi);
        }
        return null;
    }
}

类ContactPresenter:

public class ContactPresenter extends BasePresenter<ContactView> {

        public static final String TAG = ContactPresenter.class.getName();

        BaseApi baseApi;
        private ArrayList<User> contacts;
        private ArrayList<Users> usersList;
        ContactAdapter contactAdapter;

        public ContactPresenter(BaseApi baseApi) {
            this.baseApi = baseApi;
            contacts=new ArrayList<>();
            usersList=new ArrayList<> ();
        }

        public void onCreate(){
            getUsers();

        }

        private void getUsers() {
            Subscription subscription = BaseApi.getInstance().service.users()
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(users -> {
                        usersList.add(users);
for (int i = 0; i < usersList.size(); i++) {
                        contacts.addAll(usersList.get(i).getUser());
                        );
                    }
view.showData(contacts);
                    }, throwable -> {
                        Log.e("User errors", String.valueOf(throwable));
                    });

            addSubscription(subscription);
        }
    }

接口ContactView:

public interface ContactView {
    void showData(ArrayList<User> contacts);
}

class 应用:

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        PresenterFactory.create(BaseApi.getInstance());
    }
}

我想在演示者中显示数据的片段:

public class ContactFragment extends Fragment implements ContactView {

    private ArrayList<User> contacts = new ArrayList<>();
    private ArrayList<Users> usersList = new ArrayList<>();

    private ContactAdapter contactAdapter;
    private RecyclerView rvView;
    private ContactPresenter mPresenter;
    private CompositeSubscription compositeSubscription = new CompositeSubscription();
    public ContactFragment() {

    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_chat, container, false);
        rvView = (RecyclerView) view.findViewById(R.id.rvView);

        mPresenter = (ContactPresenter) PresenterFactory.getInstance().get(ContactPresenter.TAG);
        mPresenter.bindView(this);

        contactAdapter = new ContactAdapter(contacts, new OnItemClickListenerUser() {
            @Override
            public void onItemClick(User user) {

            }
        });



//          showData(contacts);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
            rvView.setLayoutManager(mLayoutManager);
            rvView.setAdapter(contactAdapter);
            contactAdapter.notifyDataSetChanged();
            return view;
        }


        @Override
        public void onDestroy() {
            super.onDestroy();
            mPresenter.unBindView();
        }

        @Override
        public void showData(ArrayList<User> contacts) {
            this.contacts=contacts;
            contactAdapter.notifyDataSetChanged();

        }
    }

1 回答

  • 1

    在方法 showData(ArrayList<User> contacts) 中进行以下

    @Override
        public void showData(ArrayList<User> contacts) {
            this.contacts.addAll(contacts);
            //contactAdapter = new ContactAdapter(contacts, new OnItemClickListenerUser() {
            //    @Override
            //      public void onItemClick(User user) {
    
            //    }
            //});
            contactAdapter.notifyDataSetChanged();
    
        }
    

相关问题