是否可以覆盖视图ID或对另一个视图ID进行某种指针引用?


我有以下场景:
一个活动我没有源代码有一些硬编码的 findViewById()
,如下所示:
class MyActivit extends Activity {& #xA;
 //将在setContentView()&#xA之后调用@越权#XA; public void onContentChanged(){
 TextView textView =(TextView)findViewById(R.id.foo);
 textView.setText( “富”);
 }

}



 如前所述,我无法更改此代码。所以这个类假定在布局中有一个带有 R.id.foo
的TextView,如下所示:
<的FrameLayout>
 < TextView id =“@ id / foo”/>
< / FrameLayout>



 但是,我当前布局有一些看起来像这样的代码:


 < FrameLayout>
 < TextView id =“@ id / other”/>
< / FrameLayout>



 问题很明显:使用 MyActivity
上的布局文件,我得到一个 NullPointerException
。
有没有办法说< code> R.id.foo 是“转发”/“指向” R.id.other
?我想避免更改我的所有布局文件。我已经尝试过这样的事情:
&lt;?xml version =“1.0”encoding =“utf-8”?&gt;&#xA;&lt; ;资源&GT;&#XA; &lt; item name =“foo”type =“id”format =“reference”&gt; @ id / other&lt; / item&gt;&#xA; &lt; item name =“other”type =“id”/&gt;&#xA;&lt; / resources&gt;&#xA;
&#xA;&#xA; 但是不起作用。有没有办法在xml中进行这样的“转发”?
&#xA;答案 0 :(得分:0)
在调用活动之前,您是否可以yourView.setId(R.id.foo)
?
如果是这种情况,那么您的所有其他文字视图都将被替换并设置为yourView.setId(R.id.foo)
完全不是这个修复的忠实粉丝......这是一个奇怪的问题。这可能是对糟糕设计的礼貌......?
答案 1 :(得分:0)
我找到了正确的解决方案。有可能在xml中这样做,我只是在我的问题中做错了。正确的解决方案是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="foo" type="id" />
<item name="other" type="id">@id/foo</item> <!-- means R.id.other = R.id.foo -->
</resources>
因此R.id.other
被赋予R.id.foo
的值。因此R.id.other
是R.id.foo