0

我有一个自定义组件,它实际上包装了另一个组件。它的布局是:

<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="@drawable/text_view_background" android:textCursorDrawable="@null" 
android:textColor="@android:color/black" android:inputType="textNoSuggestions"
android:paddingLeft="7dp"/>

在组件的代码中,我试图对其进行膨胀:

inflate(context,R.layout.results_auto_complete,this);
resultsAutoComplete=(AutoCompleteTextView)getChildAt(0);

但我得到 a ClassCastException,它说第一个孩子是 a RelativeLayout!我跟踪了这​​个相对布局的所有孩子,它实际上是小部件的布局,其配置活动包含我的自定义组件!当我用一个简单的测试活动测试组件时,一切正常!

那么为什么会发生这种情况,我能做些什么呢?谢谢。

4

2 回答 2

0

如果你AutoCompleteTextView是一个独立的 xml 文件(你的代码是根 xml 标签)results_auto_complete.xml。这是通货膨胀的结果,不需要使用 getChildAt(i)。

如果<AutoCompleteTextView>是 XML 文件中的子元素,则使用应为其分配一个 Id: android:id="@+id/your_view_id"。然后在充气之后,使用:

this.findViewById(R.your_view_id);

这是加载组件视图的当前活动。

更新,试试这个:

LayoutInflater mInflater = (LayoutInflater)etContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
resultsAutoComplete=(AutoCompleteTextView)mInflater.inflate(R.layout.your_view_id, this, true);
于 2012-11-02T07:21:52.803 回答
0

问题似乎是我有 2 个布局具有来自不同项目的相同标识符(一个项目链接到另一个项目),所以当我尝试从其中一个项目中扩充布局时,我得到的布局是另一个项目中的相同标识符。无论如何,感谢您尝试提供帮助。

于 2012-11-02T13:33:24.480 回答