2017-02-09 72 views
0

我需要獲得偉大的祖父母的觀點的參考。目前我正在使用下面的代碼成功地做到這一點:最好的方式來獲得視圖的偉大的大父母視圖?

FabToolbar fabToolbar = (FabToolbar) view.getParent().getParent().getParent().getParent(); 

這似乎有些荒謬,或者,它只是它的方式?

我之所以這樣說是因爲我的偏好要使用的數據在我的佈局結合了,我無法獲得引用任何看法,但認爲被點擊。這給出了下面的代碼,你將在下面看到,例如:

@{(view) -> viewModel.onClickPart(view)} 

的觀點被傳遞到方法是MaterialIconView,這似乎是我可以引用的唯一看法,還是有辦法通過附加這個方法的參數?我的完整佈局如下,請記住,FabToolbar包含一個LinearLayout子項和一個RelativeLayout子項,因此爲什麼看到四個調用getParent()而不是兩個(查看下面的佈局)。

<com.bowyer.app.fabtoolbar.FabToolbar 
      android:id="@+id/fab_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      app:tb_anim_duration="400" 
      app:tb_color="@color/primary" 
      app:tb_container_gravity="center" 
      app:tb_fab_type="normal"> 

     <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/accent" 
       android:gravity="center" 
       android:orientation="horizontal"> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_part" 
        android:layout_width="48dp" 
        android:layout_height="48dp" 
        android:onClick="@{(view) -> viewModel.onClickPart(view)}" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="engine" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_dyno" 
        android:layout_width="48dp" 
        android:layout_height="48dp" 
        android:onClick="@{(view) -> viewModel.onClickDyno(view)}" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="chart_line" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_timeslip" 
        android:layout_width="48dp" 
        android:layout_height="48dp" 
        android:onClick="@{(view) -> viewModel.onClickTimeslip(view)}" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="timer_10" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_laptime" 
        android:layout_width="48dp" 
        android:onClick="@{(view) -> viewModel.onClickLaptime(view)}" 
        android:layout_height="48dp" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="timer" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_fuel" 
        android:layout_width="48dp" 
        android:onClick="@{(view) -> viewModel.onClickFuel(view)}" 
        android:layout_height="48dp" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="gas_station" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 

      <net.steamcrafted.materialiconlib.MaterialIconView 
        android:id="@+id/ic_repair" 
        android:layout_width="48dp" 
        android:layout_height="48dp" 
        android:onClick="@{(view) -> viewModel.onClickRepair(view)}" 
        android:layout_marginLeft="@dimen/content_space" 
        android:layout_marginRight="@dimen/content_space" 
        android:background="@null" 
        android:scaleType="center" 
        app:materialIcon="wrench" 
        app:materialIconColor="#fff" 
        app:materialIconSize="24dp" 
        /> 
     </LinearLayout> 

    </com.bowyer.app.fabtoolbar.FabToolbar> 

謝謝你的建議。

+1

嘿 - 我有第一個不久後添加一個答案。你已經閱讀過嗎?可以在onclick監聽器中傳遞視圖。 :) – yennsarah

回答

1

您可以從您的佈局DataBinding通過其他Views

<com.bowyer.app.fabtoolbar.FabToolbar 
     android:id="@+id/fab_toolbar"> 

    <LinearLayout> 

     <net.steamcrafted.materialiconlib.MaterialIconView 
       android:id="@+id/ic_part" 
       android:onClick="@{(view) -> viewModel.onClickPart(view, fabToolbar)}"/> 

    </LinearLayout> 

</com.bowyer.app.fabtoolbar.FabToolbar> 

在你ViewModel

public void onClickPart(View view, FabToolbar fabToolbar){ ... } 

您需要使用駱駝情況寫在數據綁定任何引用的視圖。

您也可以通過這樣的一個觀點的性能。 (例如Visibility,isChecked,...)

Here是喬治山的一篇文章,他使用這個(在「查看屬性」下)。 (僅適用於其他屬性,但我想你會明白我的意思)

+0

非常感謝你!我想了解更多關於用於數據綁定的語法。你能否解釋一下這個語法的調用方式,即@ {(view) - > viewModel.onClickPart(view,fabToolbar)}?看起來像瓦肯在這一點上,但我相信這是合乎邏輯的。 – AutoM8R

+0

我想,這就是所謂的「Lambda表達式」,[這裏](https://medium.com/google-developers/android-data-binding-the-big-event-2697089dd0d7#.g2gdldymd)是由喬治山的另一篇文章(他和Yigit設計了數據綁定庫),他在那裏解釋Click Events :)我很高興我能幫助你! – yennsarah

+0

謝謝@Amylinn – AutoM8R

相關問題