覆盖视图ID

时间:2016-01-09 10:43:51

标签: android

是否可以覆盖视图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 ?我想避免更改我的所有布局文件。我已经尝试过这样的事情:

&#xA;&#xA;
 &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;

2 个答案:

答案 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.otherR.id.foo

的某种别名