【问题标题】:findViewById returns null on inside views of includefindViewById 在 include 的内部视图上返回 null
【发布时间】:2013-06-18 20:15:08
【问题描述】:

我也有类似这个帖子findViewById returns null on a LinearLayout inside an <include>d view的问题

我也有类似的问题:

调用包含块的xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            ...>
    <include  
                android:id="@+id/popupMenu"
                layout="@layout/mainmenu_popup" /> 
    </RelativeLayout>

以及包含包含代码的 mainmenu_popup.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:visibility="gone"
        android:layout_marginTop="@dimen/action_bar_height"
        android:layout_width="0dp"
        android:layout_height="0dp">
      <fragment
        android:id="@+id/mainmenupopup_fragment"
        class="RetailMobile.MainMenuFragment" />
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:layout_below="@id/mainmenupopup_fragment" 
            android:background="@color/dark_blue"
            android:id="@+id/blueLine" />
    <RelativeLayout
        ...
    </RelativeLayout>
</RelativeLayout>

我遵循 Luksprog 的回答

RelativeLayout popupMenu = this.Activity.FindViewById<RelativeLayout>(Resource.Id.popupMenu);

但 popupMenu == null

我还检查了这个线程findViewById not working for an include?,没有得到肯定的结果。

【问题讨论】:

  • 你想获得什么观点?
  • 在什么activity生命周期事件中调用findViewById?如果在为活动设置 contentView 之前调用它,那么它会失败。
  • 我尝试从 Fragment 的 OnCreateView 方法访问它,在它的布局上充气后(带有 的那个)。

标签: android android-layout include


【解决方案1】:

android:id 添加到mainmenu_popup.xml 中的RelativeLayout,然后通过那里定义的id 查找视图

【讨论】:

    【解决方案2】:

    我找到了解决方案 mainmenu_popup.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/popup_mainmenu">
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/popup_mainmenu_inner"> ...
    

    然后我指的是popup_mainmenu_inner:

     this.Activity.FindViewById<RelativeLayout>(Resource.Id.popup_mainmenu_inner);
    

    【讨论】:

    • 到目前为止还不是很开心,因为我发现如果我的父容器是 Fragment(我 call FindViewById&lt;RelativeLayout&gt;(Resource.Id.popup_mainmenu_inner))它仍然为空,只有在父容器是 FragmentActivity 或 Activity 时才有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多