【问题标题】:Referring include layout in activity code android引用在活动代码android中包含布局
【发布时间】:2015-01-17 22:59:19
【问题描述】:

我只是想知道它是否可能?我在活动的布局 xml 文件中使用包含标记

layout.xml

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:padding="5dp">

    <include android:id="@+id/error_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/error_xml"
      android:visibility="gone"/> --- at first keeping it invisible

<EditText 
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:paddingLeft="10dp"
       />
</LinearLayout>

erro_xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/error_linear"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
     android:background="@drawable/error_bg"
     android:weightSum="1"
     android:layout_marginTop="10dp"
     android:visibility="gone" >

   <TextView android:id="@+id/error_txt"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textColor="@color/white"
    android:textSize="16sp"

     android:layout_weight="0.9"
     android:padding="10dp"/> 

   <ImageView android:id="@+id/error_cross"
    android:layout_width="0dp"
    android:layout_height="wrap_content"

    android:src="@drawable/squarecross"
     android:layout_weight="0.1"
   android:layout_marginTop="6dp"/>
</LinearLayout>

出于某些原因,我希望在活动代码中动态处理的某些条件下显示包含的布局

我知道我们可以通过编写以下代码来引用 EditText 等视图:

EditText edit = (EditText)findViewById(R.id.edit);

我也可以像上面的代码一样引用包含标签布局吗?可能吗?还是我必须给它充气?但是怎么做?我太糊涂了。

编辑

正如 MathanG 所回答的那样——当我在片段中使用线性布局的引用时,即

LinearLayout error_layout = (LinearLayout)rootView.findViewById(R.id.error_layout);

上述语句在片段中使用时有效。但是当我试图通过活动引用相同的内容时,它给了我空指针异常

【问题讨论】:

    标签: android android-layout layout android-activity include


    【解决方案1】:

    您可以直接访问包含的布局内的视图。 Include Tag 将动态地在使用的布局内包含整个布局。因此,您直接访问它不会有任何问题。要隐藏和显示包含的布局,您可以使用

    error_layout.setVisiblity(View.GONE) 
    error_layout.setVisiblity(View.VISIBLE) 
    

    其中error_layout是包含布局的根布局类型(error_xml)。

    【讨论】:

    • 没有error_layout应该是error_xml布局的根布局。您没有发布 error_xml,所以我不知道您在 error_xml 中使用了什么布局。
    • 嘿,当我在片段中使用包含时,这很有效,但是当我尝试通过线性布局的引用来引用包含时,这不适用于活动。我将使用包含布局内容编辑问题。
    • 使用 findviewById() 代替 rootView.findViewById()
    • 您正在尝试从活动访问片段内的视图。那么你的问题本身就错了。您应该询问如何从活动访问片段内的视图。
    • 在此处参考 SMR 答案stackoverflow.com/questions/24188050/…
    【解决方案2】:

    是的,当然您可以按照@MathanG 的建议访问布局内的视图,因为即使布局可见性设置为“已消失”,这并不意味着布局已被删除,它实际上只存在于布局不需要任何空间参考Android Developer setVisibility="gone"

    【讨论】:

    • 我知道我可以访问它们。但我想知道如何?
    • 为此我请您参考 MathanG 的答案,我是在帮助您了解其背后的原因,因为它的视图是可访问的。
    • 嗯,谢谢.. 但是 MathanG 的答案也不起作用.. 可能我在这里做一些愚蠢的事情.. 但我尝试在活动中使用 linearLayout(即 error_layout 和 error_linear) 引用这两个 id 但这给了我 nullpointerexception .. MathanG 也提到我需要引用根布局的 id,在这种情况下是“error_linear”,它在片段中使用时也给了我 nullpointer,但 error_layout 与片段一起使用..
    • @pooh1527 如果您想访问 TextView 或 Imageview 直接使用它们各自的 ID,如果您想访问整个布局,请使用您为包含标签提供的推荐 ID。
    • 我这样做了,但它不起作用..我为 id error_layout 创建了一个 LinearLayout 引用,但它在活动中给出了空指针,但在片段中工作..我必须将它转换为 LinearLayout 以外的其他东西吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多