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);

しかし、私は を取得してClassCastExceptionおり、最初の子はRelativeLayout!と表示されています。この相対レイアウトのすべての子をトレースしましたが、実際には構成アクティビティにカスタム コンポーネントが含まれるウィジェットのレイアウトです! 簡単なテスト アクティビティでコンポーネントをテストしたところ、すべてが機能しました。

では、なぜそれが起こっているのでしょうか。どうすればよいのでしょうか。ありがとう。

4

2 に答える 2

0

AutoCompleteTextViewスタンドアロンの xml ファイル (コードはルート xml タグ) の場合、 results_auto_complete.xml. これはインフレの結果であり、getChildAt(i) を使用する必要はありません。

が XML ファイルの子要素である場合<AutoCompleteTextView>、使用してそれに 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つのレイアウトがあることです(1つのプロジェクトが別のプロジェクトにリンクされています)ので、プロジェクトの1つからレイアウトを膨らませようとすると、レイアウトを取得しています他のプロジェクトの同じ識別子。とにかく、助けてくれてありがとう。

于 2012-11-02T13:33:24.480 に答える