关于布局xml文件中view的id重复的问题

前端之家收集整理的这篇文章主要介绍了关于布局xml文件中view的id重复的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天遇到一个很奇葩的问题,关于id重复的,记录下。

页面的整体布局比如是这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/light_background"
    android:orientation="vertical"

    <include layout="@layout/toolbar"/>

	<com.shenhuniurou.widget.FilterView
		android:id="@+id/filter_view"
		android:layout_width="match_parent"
		android:layout_height="45dp"/>  

	<ListView
		android:id="@+id/listview"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:scrollbars="vertical"
		android:dividerHeight="10dp"/>        
       
</LinearLayout>

可以看到,其中有一个用于展示数据列表的ListView,它的id为listview,FilterView是我自定义的一个分类筛选的view,它也有自己的布局,关键是在它的布局中,我也放了一个ListView用来展示分类数据,巧了,它的id我也没注意,写成了listview,如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent">

	<View
		android:id="@+id/view_mask_bg"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:visibility="gone"
		android:background="@color/halftransparent"/>

	<LinearLayout
		android:id="@+id/ll_content_list_view"
		android:layout_width="match_parent"
		android:layout_height="360dp"
		android:orientation="horizontal"
		android:visibility="visible">

		<ListView
			android:id="@+id/lv_category"
			android:layout_width="match_parent"
			android:layout_height="match_parent"
			android:background="#e0e0e0"
			android:divider="#d9d9d9"
			android:dividerHeight="1dp"
			android:scrollbars="none"
			android:visibility="gone"/>

	</LinearLayout>
	
</FrameLayout>

然后问题来了,我是用的ButterKnife获取view实例的,as编译也没报错,列表数据的listview设置了adapter之后,数据一直无法显示出来,仔细检查代码逻辑也没发现问题,再检查xml布局,发现listview的id一样,修改一个之后,运行正常了。

得出的结论就是,在自定义view里面使用了xml布局,在整体页面的xml中使用自定义view也就相当于includemerge自定义view中的xml,,虽然编译不会报错,但是findViewById时始终得到的是页面布局顺序中相同id的第一个view的实例。

猜你在找的XML相关文章