저는 Architecture Components를 실험하고 있으며 RecyclerView의 각 항목에 대한 ViewModel을 작성하려고합니다. 공식적으로 맞는지 확실하지 않거나 "오래된 방법"을 고수해야합니다. 잘 작동하지만 아주 기본입니다Android Architecture 구성 요소 : RecyclerView 항목에 ViewModel 사용
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
private List<Post> list;
public static class PostViewHolder extends RecyclerView.ViewHolder{
final ItemPostBinding binding;
public PostViewHolder(ItemPostBinding binding){
super(binding.getRoot());
this.binding = binding;
}
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemPostBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_post,
parent, false);
return new PostViewHolder(binding, parent.getContext());
}
@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
holder.binding.setPost(list.get(position));
holder.binding.executePendingBindings();
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public void setList(List<Post> list){
this.list = list;
notifyDataSetChanged();
}
}
:
나는이 어댑터가 있습니다. 각 항목이 자신의 ViewModel과 연결되도록 업데이트하려면 어떻게해야합니까? 그게 가능한가?
편집 : 그것은 작동하지만 올바른 방법은 그것을 할 것입니다
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
private List<Post> list;
public static class PostViewHolder extends RecyclerView.ViewHolder{
final ItemPostBinding binding;
private final Context context;
private GalleryItemViewModel viewModel;
public PostViewHolder(ItemPostBinding binding, Context context){
super(binding.getRoot());
this.binding = binding;
this.context = context;
}
public Context getContext(){
return context;
}
public void setViewModel(GalleryItemViewModel viewModel){
this.viewModel = viewModel;
binding.setViewModel(viewModel);
}
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemPostBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_post,
parent, false);
return new PostViewHolder(binding, parent.getContext());
}
@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
GalleryItemViewModel vm = ViewModelProviders.of((FragmentActivity) holder.getContext()).get(GalleryItemViewModel.class);
vm.setPost(list.get(position));
holder.setViewModel(vm);
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public void setList(List<Post> list){
this.list = list;
notifyDataSetChanged();
}
}
: 그것으로 재생, 나는 ViewModels에 다음과 같은 방법을 넣어 시도했습니다?
안녕 Jacopo, 당신은 다른 방법으로 어댑터를 사용할 수 있습니다 .. –
나에게 예제 또는 링크를 따라 줄 수 있습니까? –
문제가 발생할 때까지 느낀다면 https://stackoverflow.com/questions/47432835/displaying-data-in-a-recyclerview/47433409#47433409 –