を使用してonItemClickListener実装私はMVPを勉強し、ここでMVPコンセプトを台無しにされていないがどことがは私がonClickListener実装すべきか混乱してしまいました。 https://android.jlelse.eu/recyclerview-in-mvp-passive-views-approach-8dd74633158
はMVPパターン
私の実装:
は、このガイドに従いました。
アダプタ:
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);
}
私はアダプタでonClickListenerオブジェクトを作成し、ViewHolderでそれを使用についてだった見ましたが、これですべてのガイド実装、私は私の発表者のすべてのアダプタ機能をオーバーライドするonClickListener(android related stuff)を渡すと、mvpパターンと矛盾します。この場合に何をするか。たぶん、誰かが解決策を書くことができました - 本当に混乱しました。
私の主な目標は、OnClickListenerは、Android SDKからインタフェースである
たとえば、選択したアイテムの色を変更したい場合はどうすればいいですか? アイテムをプレゼンターに渡すことはできません(前にも触れましたが)私はそのポジションを渡すことができました。 – JoshuaMad
@JoshuaMad既に用意されている抽象化を使用することができます。位置とRepositoryRowViewを渡すことができます(これはViewHolderによって実装されているため、パラメータとして「this」を単に追加することができます)。 RepositoryRowViewクラスにメソッドを追加するよりも簡単です。何か "markRowAs ..."とその実装は色の変更を行います。 –