6

Я внедрил DataBinding в Activity, Fragment и RecyclerView. Теперь пытаясь сделать это в Dialog, но немного путайте о том, как установить в нем пользовательский вид?DataBinding с Android Dialog

Вот код, который я внедрил для 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(); 

Я знаю, если это Activity мы можем выполнить DataBindingUtil.setContentView() и Fragment мы можем выполнить DataBindingUtil.inflate(), но я путать о том, как конвертировать dialog.setContentView(R.layout.layout_terms); с DataBinding.

+1

Интересный вопрос. – pRaNaY

+0

Почему вы не используете DialogFragment? –

ответ

4

Предполагая, что-то вроде это ваш 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> 

Во-первых, вам нужно получить Binding. Это делается просто надувать его:

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

Второй шаг: Установите ваш termsBinding.getRoot() в ContentView:

dialog.setContentView(termsBinding.getRoot()); 

И вы сделали. :)

+0

Да, что сработало, спасибо. –

+0

Есть небольшое изменение, вы можете его забыть, я добавил свой ответ. –

+0

Однако ваш ответ абсолютно прав, если я включил мое мнение, но здесь я использую диалог, чтобы он был в другом XML-файле и не мог включить его в мой основной xml. –