Как использовать «OnClickListener» в MPV в Android?

#android #mvp

#Android #mvp

Вопрос:

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

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

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

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

 public interface HomeContract {

interface View extends BaseView {

    void showNews(List<News> newsList);

    void showError(String error);

}

interface Presenter extends BasePresenter<View> {

    void getNewsList();


} }
 

класс presenter :

 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 amp;amp; 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. btn_Ok.setOnClickListener(view -> presenter.onOkClicked());

Ответ №1:

В вашем интерфейсе presenter введите метод :

 interface Presenter extends BasePresenter<View> {

void getNewsList();

void onButtonClicked();

}
 

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

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

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