首页 > 解决方案 > 如何在 MVVM 中对动态膨胀的布局进行数据绑定

问题描述

我有一个可观察到的膨胀 3 种类型的布局

mEventActivityViewModel.getEventPhotos().observe(this, new Observer<List<EventPhotosDao.EventPhotos>>() {
    @Override
    public void onChanged(List<EventPhotosDao.EventPhotos> eventPhotos) {

        int position = eventPhotos.size();
        switch (position){
            case 0:
                initAddPhotosButton2();
                break;

            case 1:
                inflateOnePhotoLayout();
                break;

            case 2:
                inflateTwoPhotoLayout();
                break;

            default:
                inflateThreePhotoLayout();
                break;


         }
    });

我将如何在 MVVM 架构中对动态膨胀的布局进行数据绑定?我的所有逻辑都在我的 Activity 类中吗?

private void inflateOnePhotoLayout() {
        View eventOnePhotosLayout = (View) LayoutInflater.from(this)
                .inflate(R.layout.fragevent_photolayout_onephoto, mPhotosLayout, false);
        ImageView imageView = (ImageView) eventOnePhotosLayout.findViewById(R.id.fragevent_onephotolayout_image1);
        Glide.with(this).load(mEventPhotos.get(0).getBody()).apply(RequestOptions.centerCropTransform()).into(imageView);
        mPhotosLayout.addView(eventOnePhotosLayout);

        View eventNumPhotos_1 = (View) LayoutInflater.from(this)
                .inflate(R.layout.vh_fragevent_numberpictures, mPhotosLayout, false);
        TextView tvNumberPhotos = (TextView) eventNumPhotos_1.findViewById(R.id.vh_fragevent_tv_numberpictures);
        tvNumberPhotos.setText("1");
        mPhotosLayout.addView(eventNumPhotos_1);
    }

标签: androidandroid-databinding

解决方案


不幸的是,没有静态 XML 就无法进行绑定。您可以为要更新的每个视图设置一个LiveData或一个。ObservableField

请参阅Android - 我可以以编程方式进行数据绑定吗?- 没有布局 XML


推荐阅读