slo*_*gex 18 android android-recyclerview
我和我RecyclerView的子物品有问题.它们不会延伸到整体android:layout_width="match_parent"也不会延伸fill_parent.我试过了两个.问题是,这项工作完美而没有任何变化,它以某种方式毁了.
我在a中显示这个FragmentDialog并且子项仅wrap_content在我上下滚动视图时展开,它们完全展开但是一旦我点击它们(我打电话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>
Run Code Online (Sandbox Code Playgroud)
这是我创建的适配器代码的一部分ViewHolder:
@Override
public BlockAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.block_row, parent, false);
return new ViewHolder(view);
}
Run Code Online (Sandbox Code Playgroud)
如果有帮助,这是绑定代码:
@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));
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这个工作在早上,后来改变了......
我试过的事情:
match_parent为fill_parentRecyclerView.LayoutParams为LayoutParams.MATCH_PARENT..., parent, false);,..., null);并单独添加ParamsStickHeaders越早,但是当它们被创建并且标题存在时它们都被设置,它只是不可见.任何帮助都是赞赏的!
slo*_*gex 46
问题出在新的支持库中23.2.0,所以我将其还原为23.1.1并且工作正常.如果我找到了解决方案,或者要改变什么,我会告诉你,否则我会打开这个主题,如果有其他人找到了更好的答案.
UPDATE
好的,所以我决定是时候解决这个问题,因为我们需要转移到新的支持库,我终于找到了答案.
问题是/是,新的LayoutManager使用autoMeasure()并不知它改变了我的所有match_parent来wrap_content,所以这里是你需要做的,如果遇到类似的问题.
首先创造 LinearLayoutManager llm = new LinearLayoutManager(getActivity());
然后 llm.setAutoMeasureEnabled(false);
最后你设置LinearLayoutManager你的RecyclerView,但做到这一点后 recyclerView.setAdapter(yourAdapter);
这是一个简单的例子:
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setAutoMeasureEnabled(false);
recyclerView.setLayoutManager(llm);
Run Code Online (Sandbox Code Playgroud)
为了解决此错误,我进行了更改:
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity());
Run Code Online (Sandbox Code Playgroud)
与:
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6239 次 |
| 最近记录: |