2016-07-11 51 views
6

Ho implementato DataBinding in Activity, Fragment e RecyclerView. Ora provando a farlo in Dialog, ma un po 'confuso su come impostare la visualizzazione personalizzata al suo interno?DataBinding con finestra di dialogo Android

Ecco il codice che ho implementato per Dialog.

Dialog dialog = new Dialog(context); 
dialog.getWindow(); 

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

LayoutTermsBinding termsBinding; 

dialog.setContentView(R.layout.layout_terms); 
dialog.getWindow().setLayout(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

dialog.show(); 

so se è Activity possiamo eseguire DataBindingUtil.setContentView() e per Fragment possiamo eseguire DataBindingUtil.inflate() ma sto confondere su come convertire dialog.setContentView(R.layout.layout_terms); con DataBinding.

+1

Interessante domanda. – pRaNaY

+0

Perché non usi DialogFragment? –

risposta

4

Supponendo che qualcosa di simile a questa è la tua layout_terms.xml:

<layout> 
    <data> 
     <!--You don't even need to use this one, this is important/necessary for the inflate method --> 
     <variable name="testVariable" value="String" /> 
    </data> 
    <LinearLayout> 
     <TextView /> 
    </LinearLayout> 
</layout> 

primo luogo, è necessario ottenere il vostro Binding. Questo viene fatto semplicemente gonfiando:

/* 
* This will only work, if you have a variable or something in your 'layout' tag, 
* maybe build your project beforehand. Only then the inflate method can be found. 
* context - the context you are in. The binding is my activities binding. 
* You can get the root view somehow else. 
*/ 
LayoutTermsBinding termsBinding = LayoutTermsBinding 
    .inflate(LayoutInflater.from(context), (ViewGroup) binding.getRoot(), false); 

//without a variable this would be 
LayoutTermsBinding termsBinding = DataBindingUtil. 
     inflate(LayoutInflater.from(context), R.layout.layout_terms, (ViewGroup) mainBinding.getRoot(), false); 

Secondo passo: Imposta il tuo termsBinding.getRoot() come ContentView:

dialog.setContentView(termsBinding.getRoot()); 

E il gioco è fatto. :)

+0

Sì, ha funzionato, grazie. –

+0

C'è un piccolo cambiamento, potresti dimenticarlo, ho aggiunto la mia risposta. –

+0

Tuttavia la tua risposta è assolutamente corretta se ho incluso la mia vista, ma qui sto usando la finestra di dialogo in modo che sia in un altro file xml e non possa includere quello nel mio XML principale. –