實施onItemClickListener我學習MVP和糊塗了其中和如何應該怎麼實現OnClickListener雖然這裏沒有破壞MVP的概念。使用MVP模式
按照本指南: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);
}
所有指南我看到的是關於適配器創建onClickListener對象,然後在ViewHolder使用它,但在這實現中,我重寫了演示者中的所有適配器功能並傳遞onClickListener(Android相關的東西)會矛盾的MVP模式。在這種情況下做什麼。也許有人可以寫一個解決方案 - 真的很困惑。
我的主要目標將是點擊recyclerview項目,並獲得項目名稱(通過吐司)
放什麼如果,例如,我想改變選定的項目的顏色? 我不能將項目傳遞給主持人(如前所述),但我可以通過該位置(如您所示),現在VIEW(片段)如何改變顏色或與位置有關的東西? – JoshuaMad
@JoshuaMad你可以使用你已有的抽象。您可以傳遞位置和RepositoryRowView(由ViewHolder實現,因此您可以將「this」添加爲參數)傳遞給演示者。比你可以添加方法到RepositoryRowView類。像「markRowAs ...」這樣的東西以及它的實現將會改變顏色。 –