2016-07-11 84 views
6

Activity, Fragment ve RecyclerView'da DataBinding'u uygulamıştım. Şimdi Dialog içinde yapmaya çalışıyorum, ama içinde özel bir görünüm ayarlamak için biraz kafa karıştırıcı?Android Dialog ile DataBinding

Dialog için uyguladığım kod. biz DataBindingUtil.setContentView() gerçekleştirebilir Activity ise

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

biliyorum ve Fragment için biz DataBindingUtil.inflate() gerçekleştirebilir ama DataBinding ile dialog.setContentView(R.layout.layout_terms); dönüştürme konusunda karıştırmayın duyuyorum. Böyle

+1

İlginç bir soru. – pRaNaY

+0

Neden DialogFragment'i kullanmıyorsunuz? –

cevap

4

varsayarsak şey senin layout_terms.xml geçerli:

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

Öncelikle, Binding almak gerekir. Bu basitçe şişirerek yapılır:

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

İkinci adım: Şunu düzenle termsBinding.getRoot()ContentView olarak:

dialog.setContentView(termsBinding.getRoot()); 

Ve bitirdiniz. :)

+0

Evet, işe yaradı, teşekkürler. –

+0

Hafif bir değişiklik var, bunu unutabilirsiniz, cevabımı ekledim. –

+0

Ancak, görünümümü eklediysem cevabınız kesinlikle doğrudur, ancak burada başka bir xml dosyasında olacak ve bunu ana xml'm içine dahil edemeyecek şekilde kullanıyorum. –