findViewById不工作的包括?

我有一个包括像:

<include android:id="@+id/placeHolder" layout="@layout/test" /> 

包含布局看起来像(test.xml):

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/outer" ... > <ImageView android:id="@+id/inner" ... /> </FrameLayout> 

我似乎无法在运行时findid =“inner”的内部ImageView:

 ImageView iv = (ImageView)findViewById(R.id.inner); if (iv == null) { Log.e(TAG, "Not found!"); } 

我应该能够find它吗? 这似乎是因为它使用“包含”,正常的findViewById方法不起作用。

———-更新—————-

所以我可以find分配给包含的id:

 View view = findViewById(R.id.placeHolder); // ok 

但我不能通过idfind它的任何孩子:

 view.findViewById(R.id.outer); // nope view.findViewById(R.id.inner); // nope 

如果我尝试直接search它们,就像原来一样:

 findViewById(R.id.outer); // nope findViewById(R.id.inner); // nope 

IDS在运行时是否会被剥离?

谢谢

Solutions Collecting From Web of "findViewById不工作的包括?"

尝试检索<include /> ,然后在其中search

确保您的根具有与包含的XML文件中的根元素相同的ID

 <include android:id="@+id/outer" layout="@layout/test" /> 

然后使用以下命令检索您的“内部”内容

 FrameLayout outer = (FrameLayout)findViewById(R.id.outer); ImageView iv = (ImageView)outer.findViewById(R.id.inner); if (iv == null) { Log.e(TAG, "Not found!"); } 

我只是想为未来的Google员工添加这一点,我有一种相反的问题,其中包含的XML(在这种情况下外部)的根布局,调用findViewById()时为null,但外层的孩子不是null。

通过删除include'view'的id属性(在本例中为placeHolder)解决了这个问题。 当没有了,我可以find外面,但它的ID 🙂

如果您需要一个分配给include项目的ID,我认为最好将其包装在另一个视图组中。

你可以尝试find外部父母(让我们称之为“op”),然后尝试op.findViewById()?

我有同样的问题。 我发现我使用了一个错误的函数,它有两个参数,如下所示:

 public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); setContentView(R.layout.activity_ble_connecting); //findViewByid() => wrong } 

正确的function只有一个参数:

  protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ble_connecting); //findViewByid() => correct }