Как использовать "onClickListener" в MPV в Android? - PullRequest
0 голосов
/ 18 апреля 2019

Я использую mvp архитектуру.

У меня есть метод setupViews (), в котором кнопки и ... определены, как я могу использовать setOnclickListener для кнопки в "Presenter" и вызывать его вSetupViews в разделе «активность».

Я не хочу использовать его непосредственно в «представлении», я хочу сообщить докладчику, что щелчок выполнен, и докладчик выполнит свою работу.

Мой интерфейс:

public interface HomeContract {

interface View extends BaseView {

    void showNews(List<News> newsList);

    void showError(String error);

}

interface Presenter extends BasePresenter<View> {

    void getNewsList();


} }

класс докладчика:

public class HomePresenter implements HomeContract.Presenter {

private HomeContract.View view;
private NewsDataSourse newsDataSourse;
CompositeDisposable compositeDisposable = new CompositeDisposable();

public HomePresenter(NewsDataSourse newsDataSourse) {

    this.newsDataSourse = newsDataSourse;


}

@Override
public void getNewsList() {

    newsDataSourse.getNews().subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleObserver<List<News>>() {
                @Override
                public void onSubscribe(Disposable d) {

                    compositeDisposable.add(d);

                }

                @Override
                public void onSuccess(List<News> news) {

                    view.showNews(news);
                }

                @Override
                public void onError(Throwable e) {

                    view.showError(e.toString());
                }
            });

}

@Override
public void attachView(HomeContract.View view) {

    this.view = view;
    getNewsList();

}

@Override
public void detachView() {

    this.view = null;
    if (compositeDisposable != null && compositeDisposable.size() > 0) {
        compositeDisposable.clear();
    }

}}

мой взгляд:

public class HomeActivity extends BaseActivity implements HomeContract.View {

    private HomeContract.Presenter presenter;
    private NewsRepository newsRepository = new NewsRepository();
    private RecyclerView recyclerView;
    private RecyclerAdapter recyclerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        presenter = new HomePresenter(newsRepository);


    }

    @Override
    public void setupViews() {

        Button btn_Ok = (Button) findViewById(R.id.btn_Ok);
        recyclerView = (RecyclerView) findViewById(R.id.recycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(getViewContext(), LinearLayout.VERTICAL, false));
     //   btn_Ok.setOnClickListener();

    }



    @Override
    public void showNews(List<News> newsList) {

        setupViews();
        recyclerView.setAdapter(new RecyclerAdapter(newsList, getViewContext()));
        if (newsList.size() > 0) {
            Toast.makeText(getViewContext(), "ok", Toast.LENGTH_SHORT).show();
            Toast.makeText(getViewContext(), newsList.get(0).getName(), Toast.LENGTH_SHORT).show();
        } else
            Toast.makeText(getViewContext(), "not Ok", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void showError(String error) {
        Toast.makeText(getViewContext(), error, Toast.LENGTH_SHORT).show();
    }

    @Override
    public Context getViewContext() {
        return getApplicationContext();
    }

    @Override
    protected void onStart() {
        super.onStart();
        presenter.attachView(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        presenter.detachView();
    }
}

я хочу использовать btn_Ok.setOnClickListener(presenter. ... ); в поле зрения или любое лучшее решение, вам нужно сделать это

1 Ответ

0 голосов
/ 18 апреля 2019

В интерфейсе вашего докладчика введите метод:

interface Presenter extends BasePresenter<View> {

void getNewsList();

void onButtonClicked();

}

И чем в вашем HomePresenter классе используйте его:

@Override
public void onButtonClicked(){
// continue logic here 
}

Если вы не переопределите его, класс будетпоказать ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...