【问题标题】:How could I add ViewModel arraylist data into fragment using Recyclerview如何使用 Recyclerview 将 ViewModel 数组列表数据添加到片段中
【发布时间】:2019-11-03 18:55:51
【问题描述】:

我是 android ViewModel 的新手。我尝试使用 viewmodel 和 recyclerview 添加 arraylist 项,但我不能。请帮助我..

这是一个 GalaryViewModel:

class GalleryViewModel extends ViewModel {

    private MutableLiveData<ArrayList<String>>fruits ;


      MutableLiveData<ArrayList<String>> getFruits() {
        if(fruits == null){
            fruits = new MutableLiveData<>();
            loadFruits();
        }

        return fruits;
    }

    private void loadFruits(){
        ArrayList<String> fruitList = new ArrayList<>();

        fruitList.add("Apple");
        fruitList.add("Banana");
        fruitList.add("Pinaple");
        fruitList.add("Apple");
        fruitList.add("Cucamber");
        fruitList.add("Cocunut");

        fruits.setValue(fruitList);

    }
}

这是一个 GalleryFragment:我无法在 public void onChanged() 函数中添加 setText 值

  public class GalleryFragment extends Fragment {

    private Context context;
    private View view;

    private GalleryViewModel galleryViewModel;
    private ArrayList<String> fruitList;

    public GalleryFragment(Context context, View view, GalleryViewModel galleryViewModel, ArrayList<String> fruitList) {
        this.context = context;
        this.view = view;
        this.galleryViewModel = galleryViewModel;
        this.fruitList = fruitList;
    }

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        RecyclerView recyclerView = view.findViewById(R.id.gRecyclerView);
        final GallaryRecyclerView adapter = new GallaryRecyclerView(context,fruitList);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this.context));



        galleryViewModel =
                ViewModelProviders.of(this).get(GalleryViewModel.class);
        View root = inflater.inflate(R.layout.fragment_gallery, container, false);
        final TextView textView = root.findViewById(R.id.text_gallery);
        galleryViewModel.getFruits().observe(this, new Observer<ArrayList<String>>() {

            @Override
            public void onChanged(ArrayList<String> strings) {
                textView.setText((CharSequence) strings);


            }
//            @Override
//            public void onChanged(@Nullable String s) {
//                textView.setText(s);
//            }

        });
        return root;
    }
}

这是一个 GalleryRecyclerview:

public class GallaryRecyclerView extends RecyclerView.Adapter<GallaryRecyclerView.ViewHolder>{

    private Context context;
    private ArrayList<String> fruitList;

    public GallaryRecyclerView(Context context, ArrayList<String> fruitList) {
        this.context = context;
        this.fruitList = fruitList;
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        TextView fruitsView;

        ViewHolder(@NonNull View itemView) {
            super(itemView);
            fruitsView = itemView.findViewById(R.id.text_gallery);
        }
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.fragment_gallery,parent,false);

        return new  ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.fruitsView.setText(fruitList.get(position));


    }

    @Override
    public int getItemCount() {
        return fruitList.size();
    }


}

【问题讨论】:

  • 您能否在您的RecyclerView 中展示您如何使用您的ViewModel
  • GalleryRecyclerview 上方是我的 recyclerview 代码。

标签: android android-fragments android-recyclerview android-viewmodel


【解决方案1】:

您只需在 onChanged 方法中实例化 fruitList

 @Override
        public void onChanged(ArrayList<String> strings) {
           this.fruitList = strings;

        }

【讨论】:

  • 观察数据后实例化adapter和recyclerView。 @SheikhSaadi
猜你喜欢
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多