gpt4 book ai didi

android - 当 RecyclerView 在 Dialog 上时不显示分隔符

转载 作者:太空狗 更新时间:2023-10-29 15:25:19 24 4
gpt4 key购买 nike

我对 Fragment 中的 RecyclerView 和 Dialog 中的另一个 RecyclerView 使用了完全相同的代码。

    myAdapter = MyAdapter();
var lm = LinearLayoutManager(this.context)
myRecyclerView.layoutManager = lm;
myRecyclerView.adapter = myAdapter;
var line = DividerItemDecoration(this.context, lm.orientation);
myRecyclerView.addItemDecoration(line);

奇怪的是,分割线显示在 fragment 中,但没有显示在对话框中。这是一个已知问题吗?还是我做错了什么?我只是想显示项目之间的内置黑线分隔线。

我在自定义对话框的构造函数中调用了上面的代码。

class MyDialogue:Dialog
{
constructor(context: Context?) : super(context)
{
setContentView(R.layout.my_dialogue);
window.setLayout(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

//That code above.
}

补充:似乎默认行正在使用android.R.attr.listDivider。我只是不明白为什么 RecyclerView 没有在对话框中得到它。作为解决方法,我手动将该可绘制对象设置为装饰器,现在我可以看到默认分隔线。代码如下。但为什么我必须这样做?

val a = context!!.theme.obtainStyledAttributes(
R.style.AppTheme, intArrayOf(android.R.attr.listDivider));
val attributeResourceId = a.getResourceId(0, 0)
val drawable = context.getDrawable(attributeResourceId)
line.setDrawable(drawable);
a.recycle();

最佳答案

listDivider 在默认对话框主题中设置为 null,大概是因为 AlertDialog 列表不应该有分隔线。您可以通过将不同的主题传递给 DividerItemDecoration 来为特定的对话框覆盖它。所以不是:

DividerItemDecoration(this.context, lm.orientation)

使用这个:

DividerItemDecoration(ContextThemeWrapper(this.context, R.style.AppTheme), lm.orientation)

AppTheme 是您应用的整体主题。

(感谢 Cheticamp 的评论引导我朝着正确的方向前进。)

关于android - 当 RecyclerView 在 Dialog 上时不显示分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49030029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com