【问题标题】:How to use "onClickListener" in MPV in android?如何在 android 的 MPV 中使用“onClickListener”?
【发布时间】:2019-09-08 22:46:28
【问题描述】:

我使用mvp 架构。

我有 setupViews () 方法,其中定义了按钮和 ... 我如何在“演示者”中将setOnclickListener 用作按钮并在“活动”中的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....); 或者您需要这样做的任何更好的解决方案

【问题讨论】:

  • btn_Ok.setOnClickListener(view -&gt; presenter.onOkClicked());

标签: android mvp


【解决方案1】:

在您的演示者界面中输入一个方法:

interface Presenter extends BasePresenter<View> {

void getNewsList();

void onButtonClicked();

}

比在你的HomePresenter 类中使用它:

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

如果你不覆盖它,这个类会显示一个错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多