Как я могу передать onClickListener тегу <include>? - PullRequest
0 голосов
/ 09 октября 2018

Макет, который нужно включить, выглядит следующим образом: child.xml :

 <layout>
       <data>
          <variable
              name="click"
              type="">   <!-- What type should be here? -->
       </data>    

       <LinearLayout>
           <View onClick="@{click}"/>
       </LinearLayout>
    </layout>

Чтобы включить это, parent.xml:

<layout>
    <data>
       <variable
           name="viewModel"
           type="ViewModel"/>
    </data>
    <LinearLayout>
         <View onClick="()->viewModel.click1()"/>
         <include 
             bind:click="()->viewModel.click2()"/>
             layout="@layout/child"/>
    </LinearLayout>
</layout>

Так какя могу передать clickEvent только в child.xml.Так как разные parent.xml имеют разные ViewModel, я думаю, что я не должен передавать viewModel в child.xml.Но я не знаю, как передать метод в child.xml.

Решение, которое я сейчас делаю, - это setOnClickListener в файле Java. Я сомневаюсь, что dataBinding может облегчить это.

1 Ответ

0 голосов
/ 09 октября 2018

в child.xml

<variable
    name="click"
    type="android.view.View.OnClickListener"/>


<View onClick="@{click}"/>

в parent.xml

<include
    layout="@layout/row"
    app:click="@{()-> viewModel.click2()}"
    />

Существует множество способов передачи переменных в тег include, прочитайте @ мой ответ.

...