Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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 回收视图中的项目未填充它';s宽度匹配\u父项_Android_Android Recyclerview - Fatal编程技术网

Android 回收视图中的项目未填充它';s宽度匹配\u父项

Android 回收视图中的项目未填充它';s宽度匹配\u父项,android,android-recyclerview,Android,Android Recyclerview,我的回收视图及其子项有问题。它们不会扩展到整个android:layout\u width=“match\u parent”或fill\u parent。两种我都试过了。问题是,这项工作做得很完美,没有任何改变,但不知何故,它遭到了破坏 我在一个片段对话框中显示这一点,当我上下滚动视图时,子项只会像包裹内容那样展开,它们会完全展开,但只要我单击它们(我调用notifyDataSetChanged()),它们就会再次收缩 这是一张正确填充的项目的图片,下面是它们在加载或通知数据时的状态。另外,我使

我的
回收视图及其子项有问题。它们不会扩展到整个
android:layout\u width=“match\u parent”
fill\u parent
。两种我都试过了。问题是,这项工作做得很完美,没有任何改变,但不知何故,它遭到了破坏

我在一个
片段对话框中显示这一点
,当我上下滚动视图时,子项只会像
包裹内容那样展开,它们会完全展开,但只要我单击它们(我调用
notifyDataSetChanged()
),它们就会再次收缩

这是一张正确填充的项目的图片,下面是它们在加载或通知数据时的状态。另外,我使用的
StickHeaderAdapter
,在我单击其中一个项目之前不会显示标题(这在以前是有效的,我也没有对该部分进行任何更改)

以下是子行的代码:

<?xml version="1.0" encoding="utf-8"?>
<carbon.widget.LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    app:carbon_rippleColor="@color/green"
    app:carbon_rippleStyle="background">

<carbon.widget.TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:id="@+id/block_name"
    android:padding="@dimen/block_row_padding"
    android:layout_weight="1"
    android:textSize="@dimen/block_row_text_size"
    android:textColor="@color/black"
    app:carbon_rippleColor="@color/green"
    app:carbon_rippleStyle="background"/>

<RelativeLayout
    android:id="@+id/download_layout"
    android:layout_width="64dp"
    android:layout_height="match_parent"
    android:layout_marginRight="24dp"
    android:layout_marginEnd="24dp"
    android:visibility="gone">


    <carbon.widget.ProgressBar
        android:id="@+id/downloading_bar"
        app:carbon_progressStyle="circular_indeterminate"
        app:carbon_barWidth="5dp"
        app:carbon_tint="@color/green"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:layout_margin="8dp"
        android:visibility="invisible"/>

    <carbon.widget.TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/block_progress_download"
        android:textSize="12sp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:visibility="invisible" />

</RelativeLayout>
这是绑定代码(如果有帮助):

@Override
public void onBindViewHolder(BlockAdapter.ViewHolder holder, int position) {
    if (blockData.isDownloading()) {
        holder.download_layout.setVisibility(View.VISIBLE);
        holder.download_bar.setVisibility(View.VISIBLE);
        if (blockData.getProgress() != null) {
            holder.download_progress.setVisibility(View.VISIBLE);
            holder.download_progress.setText(String.format("%d%%", blockData.getProgress()));
        }
    } else {
        holder.download_layout.setVisibility(View.GONE);
        holder.download_bar.setVisibility(View.GONE);
        holder.download_progress.setVisibility(View.GONE);
    }

    if (selected) {
        holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.green));
        holder.block_name.setTextColor(mContext.getResources().getColor(R.color.white));
    } else {
        holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.white));
        holder.block_name.setTextColor(mContext.getResources().getColor(R.color.black));
    }

}
我不知道为什么早上工作,后来又变了

我尝试过的事情:

  • 更改
    match_parent
    fill_parent
  • RecyclerView.LayoutParams
    设置为
    LayoutParams.MATCH\u PARENT
  • 通过编程更改宽度
  • 将createViewHolder从
    更改为…,父级,false)
    …,空)并分别添加参数
  • 记录宽度(有时是390,当我滚动到990,然后单击返回到390时)
  • 设置粘贴头
StickHeaders
的时间越早越好,但是当它们被创建时,它们都被设置好了,并且标题在那里,它只是不可见
感谢您的帮助

问题出在新的支持库
23.2.0
中,因此我将其恢复为
23.1.1
,它工作正常。如果我找到了一个解决方案,或者改变了什么,我会让你知道,否则,如果其他人找到了更好的答案,我会让这个线程打开

更新

好的,所以我决定是时候解决这个问题了,因为我们需要转移到新的支持库,我终于找到了答案

问题是新的
LayoutManager
正在使用
autoMeasure()

首先创建
LinearLayoutManager llm=newlinearlayoutmanager(getActivity())

然后
llm.setAutoMeasureEnabled(false)

最后,将
LinearLayoutManager
设置为您的
RecyclerView
,但在
RecyclerView.setAdapter(您的适配器)之后执行此操作

下面是一个简单的例子:

recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setAutoMeasureEnabled(false);
recyclerView.setLayoutManager(llm);

要绕过此错误,我更改了:

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity());
与:


我也有同样的问题。它只发生在某些视图上,并且是可复制的

不管出于什么原因,重写setAutoMeasureEnabled以返回false都不起作用

我使用androidx.recyclerview:recyclerview:1.1.0

我通过重置视图的宽度以匹配父视图的宽度来解决此问题,即

this.itemView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
this.itemView.requestLayout();

在绑定ViewHolder的末尾
this.itemView
在本例中是ViewHolder的根视图,即
androidx.recyclerview.widget.recyclerview.ViewHolder.itemView

是否尝试使用正常的
线性布局?我不知道什么是
carbon.widget.LinearLayout
,或者它是做什么的。它只是为点击项目增加了涟漪效应。它以前就这样做过:/嗯,它做了一些定制测量,所以我不完全相信这一点。如果它与正常布局兼容,你应该试试。我试过了,但与正常布局不兼容。我发现这些
.setLayoutManager()
.setAdapter()
存在订购错误这对我来说有点可笑,谢谢。我使用RecyclerView 25.2.0,我先设置布局管理器,然后设置AutomeasureEnabled(false),然后设置工作的适配器,然后在
setAdapter
之前设置
setAutoMeasureEnabled
也工作。我的
RecyclerView
版本是v26.1.0,因为API v27.1.0,我们需要扩展LinearLayoutManager并重写isAutoMeasureEnabled()函数以返回false,因为setAutoMeasureEnabled()方法已被删除。@anqe1ki11er我也尝试过。它不起作用。所以,最终实现了解决方案。
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
this.itemView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
this.itemView.requestLayout();