How to specify id when uses include in layout xml file

前端 未结 11 2481
挽巷
挽巷 2020-12-02 08:55

In my layout xml file, I have included other layout xml file (each with a different android id).



        
相关标签:
11条回答
  • 2020-12-02 09:38

    I think the top answer misses the most important point and might mislead people into thinking the <include/> tag creates a View that holds the include contents.

    The key point is that include's id is passed to the root view of the include's layout file.

    Meaning that this:

    // activity_main.xml
    <include layout="@layout/somelayout" android:id="@+id/someid"/>
    
    // somelayout.xml
    <?xml version="1.0" encoding="utf-8"?>
    <ImageView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    

    Becomes this:

    // activity_main.xml
    <ImageView
        android:id="@+id/someid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    
    0 讨论(0)
  • 2020-12-02 09:39

    I found out, that if you are using <merge> tag in your include layout, then the ID of include transfers to the merge tag which is not real view.

    So either remove merge, or replace it with some layout.

    Tor Norbye wrote:

    The <include> tag is not a real view, so findByView will not find it. The @id attribute (and any other attributes you've set on the include tag) gets applied on the root tag of the included layout instead. So your activity.getView(R.id.included1) should in fact be the <TextView> itself.

    0 讨论(0)
  • 2020-12-02 09:40

    If you have set id to either root tag of included layout then you can use that id or you can set id to included layout.

    But you can not set id to both it may throw exception.

    <include layout="@layout/view_contact_name" android:id="+id/test1"/>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
    ....
    </LinearLayout>
    

    Or

    <include layout="@layout/view_contact_name"/>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:id="@+id/llBottomMainView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
    ....
    </LinearLayout>
    
    0 讨论(0)
  • 2020-12-02 09:43
    1. you must set id each include tag
    2. included child element set a new id. if you look how to generate new id, look at this entry: https://stackoverflow.com/a/15442898/1136117
    0 讨论(0)
  • 2020-12-02 09:45

    In a case of using <RecyclerView> find the id of <include> by using an instance of inflated view or else it will return null.

    public class ViewHolder extends RecyclerView.ViewHolder {
    
            private mTextView;
    
            public ViewHolder(View view) {
                super(view);
                View include_1 = view.findViewById(R.id.include_1);
                mTextView = (TextView) include_1.findViewById(R.id.text_id);
            }
        }
    
    0 讨论(0)
提交回复
热议问题