【发布时间】:2019-06-29 06:25:46
【问题描述】:
我正在学习 MVP,但很困惑在哪里和如何我应该在不破坏 mvp 概念的情况下实现 onClickListener。
遵循本指南:https://android.jlelse.eu/recyclerview-in-mvp-passive-views-approach-8dd74633158
我的实现。
适配器:
public class RepositoriesRecyclerAdapter extends RecyclerView.Adapter<RepositoriesRecyclerAdapter.RepoViewHolder> {
private final RepositoriesListPresenter presenter;
public RepositoriesRecyclerAdapter(RepositoriesListPresenter repositoriesPresenter) {
this.presenter = repositoriesPresenter;
}
@Override
public RepositoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new RepositoryViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.cell_repo_view, parent, false));
}
@Override
public void onBindViewHolder(RepositoryViewHolder holder, int position) {
presenter.onBindRepositoryRowViewAtPosition(position, holder);
}
@Override
public int getItemCount() {
return presenter.getRepositoriesRowsCount();
}
}
RepositoryViewHolder 的
public class RepositoryViewHolder extends RecyclerView.ViewHolder implements RepositoryRowView {
TextView titleTextView;
TextView starsCountTextView;
public RepositoryViewHolder(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.repoTitleText);
starsCountTextView = itemView.findViewById(R.id.repoStarsCountText);
}
@Override
public void setTitle(String title) {
titleTextView.setText(title);
}
@Override
public void setStarCount(int starCount) {
starsCountTextView.setText(String.format("%s ★", starCount));
}
}
RepositoryRowView
interface RepositoryRowView {
void setTitle(String title);
void setStarCount(int starCount);
}
我看到的所有指南都是关于在 Adapter 中创建 onClickListener 对象,然后在 ViewHolder 中使用它,但是在这个实现中,我覆盖了我的演示者中的所有适配器函数并传递 onClickListener(与 Android 相关的东西)会与 mvp 模式相矛盾。在这种情况下该怎么办。也许有人可以写一个解决方案 - 真的很困惑。
我的主要目标是点击一个 recyclerview 项目并获取项目名称(通过 toast)
【问题讨论】:
标签: android onclicklistener mvp