2011-01-17 8 views
4

私はここでポイントを逃していると確信しているので、私は誰かが説明することを望んでいる。カスタムAlertDialog - android.R.id.customの問題

ユーザーがImageViewに触れたときにポップアップを作成します。あなたは、より複雑なビューを表示し、「カスタム」と呼ばれるでframeLayoutを検索し、そこにあなたのビューを追加したい場合は...

を私はAlertDialogを見ていたし、ドキュメントは言う:

...次のコードで...

FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom); 
    fl.addView(myView, new LayoutParams(MATCH_PARENT, WRAP_CONTENT)); 

だから私は、私のonclick()メソッドでは、次の試してみましたテストなど...

TextView tv = new TextView(this); 
    tv.setText("Hello World"); 
    FrameLayout customFrameLayout = (FrameLayout) findViewById(android.R.id.custom); 
    customFrameLayout.addView(tv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

私がaddView()を呼び出している上記の最後の行で、NullPointerExceptionがスローされ、android.R.id.customに問題があると思われます。

質問には、上記の何が問題なのですか?また、(おそらくDialogクラスを使用したり、それを拡張して)カスタムポップアップを作成する良い方法がありますか?

注:このサンプルではTextViewのみをテストとして使用しています。実際のポップアップにはもっと複雑なものを追加したいと思います。

<activity android:theme="@android:style/Theme.Dialog"> 

詳細についてはapplying themesを参照してください:

答えて

1

1つのオプションは、それは、ダイアログテーマを使用してActivityとスタイルを作成することです。

+0

興味深いアイデアを見ていきます。 – Squonk

+0

これは、startActivityForResult()を使用して必要な処理を行うためのより良い方法です - ありがとうございます。 – Squonk

0

あなたの問題は、あなたがレイアウトを "膨らませない"ためだと思います。これはでframeLayoutで動作するはず

LayoutInflater.from(context).inflate(android.R.id.custom, this, true) 

:でframeLayoutを使用すると、LayoutInflater

は、次のコードを使用使用する必要があります。 Android Layout tricks page

でこれについての詳細を読むまたLayoutInflater

編集をチェックアウト:私はここで、この問題と同じ記事があまりにもそこにあることをaswell気づいた:How to implement a custom AlertDialog View

+0

ありがとうございました - 私はAlertDialogで私が望むように動作するようにはできませんでしたが、私は今どのようにFrameLayouts properleyを処理するかを見ています。 – Squonk

+0

IDを拡張することはできません。これが機能するには、R.layoutの値が必要です。 –

0

アウトMossilaのAlertDialogのカスタマイズ例。私はそれらをGoogleの例よりも役に立つと分かりました。

私はMossilaのコードを自分のプロジェクトに直接貼り付け、ちょうどうまくいった:-)その後私は自分のニーズを満たすためにいくつか微調整を行いました。

http://mossila.wordpress.com/2011/05/10/android-dialog-single-choice-items/

0

使用AlertDialog.setView(ビュービュー)AlertDialogにカスタムビューを追加します。 my answer to a similar questionをチェックしてください。

関連する問題