0

カスタムアラートダイアログを膨らませようとしていますが、何か奇妙なことに遭遇しました。

layout = inflater.inflate(R.layout.call_or_sms_dialog,(ViewGroup)findViewById(R.id.contacts));

inflate()メソッドは2つの引数を取ります。つまり、インフレートされるリソースと、生成されたダイアログの親となるオプションのビューです。私の問題は、オプションのビュー部分にあります。

findViewById(R.id.contacts)からルートビューのIDが見つかりません。「連絡先」は、この特定のアクティビティのコントロールを含むxmlファイルです。他のアクティビティの他のxmlファイルを参照することはできましたが、このcontacts.xmlを参照できませんでした。

Eclipseで「クリーン」ビルドを実行してR.javaを再生成しようとしましたが、それでも役に立ちません。代わりに「contacts.xml」のIDを手動で生成する方法はありますか?

4

3 に答える 3

3

「連絡先」は、この特定のアクティビティのコントロールを含むxmlファイルです。

XMLの場合、R.id;を使用してアクセスすることはできません。R.xmlしかし、またはのようなものR.layout。もちろん、使用している場合はfindViewById、有効なID(によって参照されるものR.id)を渡す必要があります。だから...あなたがしなければならないことはあなたが参照したいビューにIDを与えることです。例えば:

<ViewGroup
   android:id="@+id/contacts"
   blah

また、findViewByIdメソッドを直接使用している場合は、IDが現在のレイアウトの一部である必要があることに注意してください(つまり、で設定されたレイアウトを意味しますsetContentView)。IDが現在のレイアウトに属していない場合は、代わりに次のようなものを実行する必要がありますreferenceToTheViewContainingTheIDResource.findViewById()

于 2011-02-15T04:29:46.873 に答える
2
Please try this code:

LayoutInflater inflater = LayoutInflater.from(this);
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("SET YOUR TITLE");

View view = inflater.inflate(R.layout.call_or_sms_dialog, null);
v  = (ViewGroup)findViewById(R.id.contacts);
alertDialog.setView(view);
于 2011-06-25T12:33:52.180 に答える
0

2 番目の引数は、インフレートするレイアウトのルート ビューではなく、既存のビューを意味します。これが問題ですか?いつでもnull2 番目の引数として渡すことができます。

于 2011-02-15T04:36:57.417 に答える