2012-04-02 1 views
0

私は2つのEditTextフィールドを持つカスタムダイアログレイアウトを持っています。そして、私は最初に両方の(レイアウトXMLの)可視性をGONEに設定しました。ダイアログのonCreateでは、2つのEditTextフィールドの1つを見つけるためにfindViewByTagを実行したいので、可視性をVISIBLEに切り替えることができます。 XMLで可視性を切り替えると、すべてがダイアログ内で検索されますが、ダイアログ内のメインビューへの参照を取得する方法がわからないため、findViewByTagを呼び出すことができます。ダイアログ内のfindViewByTag

私は、ダイアログクラスのonCreateでレイアウトを膨らませています。これは、それがどのようにして見つかったのかを示しています。私は呼び出し側で参照を取得し、それを行う最良の方法であればダイアログを表示する前に可視性を設定するために必要ならばそれを変更したいと思います。

Androidにはまだまだ新しく、カスタムダイアログをどのように処理するのが良いかについてのヒントがあります。

+0

findViewByTagは、タグとして配置したオブジェクトに「よく書かれた」等価がある場合にのみ、期待どおりに動作します。 –

答えて

0

私はこの例をビュークラスの外から想定します。

Dialog amazingDialog = new Dialog(context); 

amazingDialog.setContentView(R.layout.amazingdialogcontentview) 
MyAmazingView view = (MyAmazingView)amazingDialog.findViewById(R.id.amazingview); 
TextView tv = (TextView)amazingDialog.findViewById(R.id.textview); 
0

私はあなたのユースケースがあり、正確にはよく分からないので、あなたは、あなたがのonCreateで初期化することができ、いくつかのメンバ変数へのアクセス権を持っている場合は、これを行うには良い方法があるかもしれませんが、あなたがいない場合:

あなたは

View parent = myDialog.findViewById(R.id.parentId) 

は、それらのEditTextsの既知の親ビューを取得しようとし、次に呼び出すことができます

parent.findViewWithTag(myTag) 

をクリックしてEditTextを探します。

あなたがあなたの質問を語ったやり方と、あなたがAndroidで新しいと言ったという事実を見ると、IDとタグの違いに精通していますか?

IDは、何かに名前を付けるように指示したときにAndroidによってアイテム(たとえば、ビュー)に割り当てられるリソース番号です。

<TextView android:id="@+id/myTextView"/> <!--with other parameters as necessary--> 

そして、あなたはそれのTextViewを見つけること

TextView tv = (TextView)findViewById(R.id.myTextView); 

を使用したい:あなたはあなたのXMLに、宣言したいです。

タグはビューにアタッチできるオブジェクトです(XMLではできないことは確かです)。後で見つけたり、次のときに使用するための興味深い情報を残したりするためです(コンテンツに関連付けられたデータオブジェクトのように)ルックアップします。だから、あなたは言うかもしれない:

tv.setTag(myInterestingData); 

後でちょうどテレビへの参照を持っていることによってmyInterestingDataを調べることができるように。

+0

あなたが使用しようとしていたアンドロイド:タグを使ってXMLでタグを設定できます。私の目標は、実際にIDを知っている編集フィールドを実際に知ることでした。タグは、それらがうまく形成されている場合、それを可能にします。 – Dave

0

多くの読書と試行錯誤の末、私はこれを行う唯一の方法はXMLで複数のEditTextを使用し、すべてがvisibility = "gone"であると結論付けました。次に、Javaコードでifまたはswitchを探して、タグまたはIDのいずれかを参照してコントロールを表示します。私はDialogクラスにあまりにも多くの抽象化を強制しようとしていました。複数のEditTextでは、各ダイアログに1つのクラスを持たせるのではなく、複数のダイアログにクラスを使用できます。

関連する問題