Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在数据绑定中设置动态布局高度_Android_Data Binding_Android Databinding - Fatal编程技术网

Android 在数据绑定中设置动态布局高度

Android 在数据绑定中设置动态布局高度,android,data-binding,android-databinding,Android,Data Binding,Android Databinding,我想在数据绑定结构中设置动态布局高度 我尝试了一些东西,但我得到了一个例外: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference at databinding.ItemGroupCommentsBinding.executeBindings(ItemGroupC

我想在数据绑定结构中设置动态布局高度

我尝试了一些东西,但我得到了一个例外:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
                  at databinding.ItemGroupCommentsBinding.executeBindings(ItemGroupCommentsBinding.java:147)
                  at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355)
                  at view.base.adapter.DataBindingAdapter.onBindViewHolder(DataBindingAdapter.java:32)
                  at view.base.adapter.DataBindingAdapter.onBindViewHolder(DataBindingAdapter.java:15)
                  at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6279)
                  at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6312)
                  at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5258)
                  at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5521)
                  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5363)
                  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5359)
                  at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2141)
                  at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556)
                  at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488)
                  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585)
                  at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
                  at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3506)
                  at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3254)
                  at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:636)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                  at android.view.View.layout(View.java:15604)
                  at android.view.ViewGroup.layout(ViewGroup.java:4966)
                  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
                  at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
代码是:

Fragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    db = DataBindingUtil.inflate(inflater, R.layout.fragment_group_comments, container, false);

    getSubComponent().inject(this);

    db.setVariable(BR.height, 0);

    // Inflate the layout for this fragment
    return db.getRoot();
}

@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, float commentNumber) {
    Timber.e("setLayoutHeight " + commentNumber);

    try {
        GridLayoutManager.LayoutParams layoutParams =
                (GridLayoutManager.LayoutParams) view.getLayoutParams();

        if (10 <= commentNumber && commentNumber < 10) {
            layoutParams.height = 400;
        } else if (11 <= commentNumber && commentNumber < 20) {
            layoutParams.height = 500;
        }

        view.setLayoutParams(layoutParams);
    } catch (Exception ignore) {}
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
db=DataBindingUtil.inflate(充气器,R.layout.fragment\u group\u注释,容器,false);
getSubComponent().inject(此);
db.setVariable(BR.height,0);
//为该碎片膨胀布局
返回db.getRoot();
}
@BindingAdapter(“安卓:布局高度”)
公共静态void setLayouthweight(视图、浮点注释编号){
木材.e(“SetLayouthweight”+编号);
试一试{
GridLayoutManager.LayoutParams LayoutParams=
(GridLayoutManager.LayoutParams)view.getLayoutParams();

如果(10您需要在绑定适配器中将
commentNumber
类型从
float
更改为
Integer
或更改为
int

@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, Integer commentNumber) {
    // your code staff        
}

检查,其中
@BindingAdapter
用于设置视图的填充。

这里有一个示例
BindingAdapter
,它可以动态设置视图的高度。它使用两种不同的
布局参数
类型。如果缺少所需的类型,只需在
选项时将其添加为下一个

import org.jetbrains.anko.dip

/**
 * Set the view's height using Android Binding adapter
 *
 * Usage:
 *  <LinearLayout
 *     android:layout_width="match_parent"
 *     android:layout_height="wrap_content"
 *     app:dynamicHeight="@{viewModel.myCustomHeight}" />
 *
 * @param  dpHeight  height in density-independent pixels [ObservableInt].
 * @author Bartosz Kosarzycki
 */
@BindingAdapter("dynamicHeight")
fun View.setDynamicHeight(dpHeight: ObservableInt) {
    val pxHeight = dip(dpHeight.get())
    when (this.layoutParams) {
        is LinearLayout.LayoutParams ->
            this.layoutParams = LinearLayout.LayoutParams(layoutParams.width, pxHeight)
        is RelativeLayout.LayoutParams ->
            this.layoutParams = RelativeLayout.LayoutParams(layoutParams.width, pxHeight)
        is ViewGroup.LayoutParams ->
            this.layoutParams = ViewGroup.LayoutParams(layoutParams.width, pxHeight)
        else -> throw RuntimeException("No such view type in 'dynamicHeight' binding adapter")
    }
}
import org.jetbrains.anko.dip
/**
*使用Android绑定适配器设置视图的高度
*
*用法:
*  
*
*@param dpHeight高度(以密度无关的像素为单位)[可观察]。
*@作者Bartosz Kosarzycki
*/
@BindingAdapter(“动态灯光”)
有趣的视图。设置动态灯光(dpHeight:ObservableInt){
val pxHeight=dip(dpHeight.get())
何时(this.layoutParams){
是LinearLayout.LayoutParams->
this.layoutParams=LinearLayout.layoutParams(layoutParams.width,pxHeight)
是RelativeLayout.LayoutParams->
this.layoutParams=RelativeLayout.layoutParams(layoutParams.width,pxHeight)
是ViewGroup.LayoutParams->
this.layoutParams=ViewGroup.layoutParams(layoutParams.width,pxHeight)
else->throw RuntimeException(“dynamicHeight”绑定适配器中没有此类视图类型”)
}
}

当布局xml的数据绑定初始化时,您何时调用了
setLayouthweight
方法?@Huy Towerin
onCreateView
。现在一切正常。谢谢。
import org.jetbrains.anko.dip

/**
 * Set the view's height using Android Binding adapter
 *
 * Usage:
 *  <LinearLayout
 *     android:layout_width="match_parent"
 *     android:layout_height="wrap_content"
 *     app:dynamicHeight="@{viewModel.myCustomHeight}" />
 *
 * @param  dpHeight  height in density-independent pixels [ObservableInt].
 * @author Bartosz Kosarzycki
 */
@BindingAdapter("dynamicHeight")
fun View.setDynamicHeight(dpHeight: ObservableInt) {
    val pxHeight = dip(dpHeight.get())
    when (this.layoutParams) {
        is LinearLayout.LayoutParams ->
            this.layoutParams = LinearLayout.LayoutParams(layoutParams.width, pxHeight)
        is RelativeLayout.LayoutParams ->
            this.layoutParams = RelativeLayout.LayoutParams(layoutParams.width, pxHeight)
        is ViewGroup.LayoutParams ->
            this.layoutParams = ViewGroup.LayoutParams(layoutParams.width, pxHeight)
        else -> throw RuntimeException("No such view type in 'dynamicHeight' binding adapter")
    }
}