Android-skin-support icon indicating copy to clipboard operation
Android-skin-support copied to clipboard

databinding设置adapter怎么支持?

Open shejishi opened this issue 5 years ago • 1 comments
trafficstars

databinding设置了adapter, 比如这种用法:

<Button
                    android:id="@+id/setting_mode_content"
                    drawable_isCommonTouch="@{true}"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:layout_marginTop="@dimen/dp_1"
                    android:gravity="center"
                    android:onClick="onClick"
                    android:paddingLeft="20dp"
                    android:paddingRight="20dp" />

生成的xml,databinding文件:

package com.yilahuo.driftbottle.databinding;
import com.yilahuo.driftbottle.R;
import com.yilahuo.driftbottle.BR;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;
@SuppressWarnings("unchecked")
public class ActivitySettingBindingImpl extends ActivitySettingBinding  {

    ...

    @Override
    protected void executeBindings() {
        long dirtyFlags = 0;
        synchronized(this) {
            dirtyFlags = mDirtyFlags;
            mDirtyFlags = 0;
        }
        // batch finished
        if ((dirtyFlags & 0x1L) != 0) {
            // api target 1

            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlBind, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlHmd, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlJcgx, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlQingli, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlTuijianPlp, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryDisturb, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryFeedBack, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryNotice, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryTeenagers, true);
            databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.settingModeContent, true);
        }
    }
    ...
}

// 使用adapter的文件:

    /**
     * @param view 需要设置的view按钮drawable
     */
    @JvmStatic
    @BindingAdapter(value = ["drawable_isCommonTouch"], requireAll = false)
    fun setCommonViewTouchBackground(view: View, isCommonTouchBtn: Boolean) {
        if (isCommonTouchBtn) {
            setViewBackground(view,
                    GradientDrawable.Orientation.LEFT_RIGHT,
                    ContextCompat.getColor(view.context, R.color.gBackgroundColor),
                    ContextCompat.getColor(view.context, R.color.gBackgroundColor),
                    Color.TRANSPARENT, 0f,
                    ContextCompat.getColor(view.context, R.color.gBlack3Press),
                    0,
                    0,
                    Color.TRANSPARENT.toFloat(),
                    Color.parseColor("#DDDDDD"),
                    0,
                    0,
                    0f,
                    1f, 0f, 0f, 0f, 0f,
                    true
            )
        }
    }

调试发现是没有走 executeBindings 方法,这种能实现吗?

shejishi avatar Aug 12 '20 10:08 shejishi

暂时解决方法是将所有adapter中的属性放入到自定义属性中,然后自己实现一套DatabindingView来适配

shejishi avatar Aug 15 '20 05:08 shejishi