#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
}
Если вы не переопределите его, класс покажет ошибку