gpt4 book ai didi

android - 如何在Build-Tools 3.6.0中使用 “R.id object = new R.id();”?

转载 作者:行者123 更新时间:2023-12-03 05:28:24 25 4
gpt4 key购买 nike

我必须对不同的构建样式使用不同的布局,其中一种样式中存在ui元素而另一种样式中不存在。

之前我只是将元素设置为不可见/消失,但是现在我有一个NestedScrollView及其子片段,其中包含RecyclerView。
child 需要一种口味中没有的另一种口味的纽扣。
如果我只是将其设置为不可见或消失,则布局将无法正常工作(不滚动且高度过低)。

我将布局xml复制到flavor的路径,并删除了按钮,并在片段代码中使用了反射,以了解按钮是否存在并实现其代码。

    Class<R.id> c = R.id.class;
R.id object = new R.id();
Field[] fields = c.getDeclaredFields();

for (Field field : fields)
{
field.setAccessible(true);
try
{
if (field.getName().equals("TheButton"))
{
Button tBtn = tView.findViewById((Integer) field.get(object));
if (tBtn != null)
tBtn.setOnClickListener(...);
}
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}

从3.5.3升级到3.6.0的Gradle构建工具后,我得到了

error: id() has private access in id R.id object = new R.id();



为线
R.id object = new R.id();

尝试构建时。
目前,我只是使用旧的构建工具,但是我认为这不是永久性的解决方案。

我还能做点什么吗?我想摆脱反射(reflection),但是如果确实是唯一的方法,那么它应该与最新的构建工具一起使用...

最佳答案

似乎增添 flavor 是不值得的。他们制造的问题多于解决的问题。使用它们不是我的主意,我不会自动使用它们。甚至在不同项目之间复制和粘贴也可以减少麻烦...
我将删除反射,并将在以后的Android开发中不惜一切代价避免它。

关于android - 如何在Build-Tools 3.6.0中使用 “R.id object = new R.id();”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60390797/

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