gpt4 book ai didi

android - 无法在运行时更改开关文本开/关

转载 作者:行者123 更新时间:2023-11-29 16:04:57 26 4
gpt4 key购买 nike

我遇到无法更改的问题 Switch运行时的 textOn/textOff 内容。这意味着,绑定(bind)到简单按钮(用于测试目的)的以下代码不起作用:

private int _counter = 1;
@Override
public void onClick(View arg0) {
_sw.setTextOn("On " + _counter);
_sw.setTextOff("Off " + _counter);
_sw.setText("Text" + _counter);
_sw.setVisibility(_sw.getVisibility() == View.GONE ? View.VISIBLE : View.GONE);
_counter ++;
_sw.invalidate(); // no effect
_sw.setFocusable(true); // no effect
_sw.getTextOn(); // returns the correct value which was set above
}

此代码更改与 Switch 关联的文本(setText 方法有效),但不更改开关上的 On 或 Off 标签。有趣的是,如果我调用 getTextOngetTextOff,我会取回在此 Switch 上设置的正确值。任何想法为什么这不能按预期工作?

问候,

米哈。

最佳答案

由于缺乏更好的方法(我愿意接受建议),我使用了一个丑陋的反射技巧来解决这个问题。我有一个扩展 Switch 的类,我在其中实现了以下方法:

@Override
public void requestLayout() {
IslLog.i(TAG, "requestLayout");
try {
java.lang.reflect.Field mOnLayout = Switch.class.getDeclaredField("mOnLayout");
mOnLayout.setAccessible(true);
mOnLayout.set(this, null);
java.lang.reflect.Field mOffLayout = Switch.class.getDeclaredField("mOffLayout");
mOffLayout.setAccessible(true);
mOffLayout.set(this, null);
} catch (Exception x) {
Log.e(TAG, x.getMessage(), x);
}
super.requestLayout();
}

现在可以了。在我使用setTextOnsetTextOff之后,我只是调用了requestLayout,它使用反射来设置mOnLayout mOffLayout 为空; requestLayout 依次触发 onMeasure,它会重新初始化这些变量。它很丑陋,但它确实有效,恕我直言,这比将 Switch 的完整源代码复制到应用程序要好。

关于android - 无法在运行时更改开关文本开/关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19790440/

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