Implicit Attribute Listeners( reference )in Android idによってビューにアクセスし、checkedなどの属性にアクセスできるデータバインディングを使用して、ビューの可視性を制御しようとしました、目に見えるなど...しかし、これを使用しようとすると、そのようなエラーがスローされます
Error:(119, 29) Identifiers must have user defined types from the XML file. addTodo_switch_remind is missing it
<Android.support.v7.widget.SwitchCompat
Android:id="@+id/addTodo_switch_remind"
style="@style/MediumTextViewStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/addTodo_space_project"
Android:text="@string/add_todo_remind_label"
Android:textOff="@string/generic_no_text"
Android:textOn="@string/generic_yes_text" />
<Android.support.v4.widget.Space
Android:id="@+id/addTodo_space_remind"
style="@style/FormsSpacingStyle"
Android:layout_below="@+id/addTodo_switch_remind" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@id/addTodo_space_remind"
Android:orientation="vertical"
Android:padding="@dimen/grid_box_single"
Android:visibility="@{addTodo_switch_remind.checked ? View.VISIBLE : View.GONE}">
暗黙の属性リスナーが式で使用される場合、キャメルケースを使用するように見えますが、これのおかげで post わかりました。
<!--Recurring Reminder -->
<Android.support.v7.widget.SwitchCompat
Android:id="@+id/addTodo_switch_remind"
style="@style/MediumTextViewStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/addTodo_space_project"
Android:text="@string/add_todo_remind_label"
Android:textOff="@string/generic_no_text"
Android:textOn="@string/generic_yes_text" />
<Android.support.v4.widget.Space
Android:id="@+id/addTodo_space_remind"
style="@style/FormsSpacingStyle"
Android:layout_below="@+id/addTodo_switch_remind" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@id/addTodo_space_remind"
Android:orientation="vertical"
Android:padding="@dimen/grid_box_single"
Android:visibility="@{addTodoSwitchRemind.checked ? View.VISIBLE : View.GONE}">
同じ問題を抱えている他の人のために文書化する
.xmlファイルでView.VISIBLE
/View.GONE
を使用する場合、次のようにデータセクションに<import type="Android.view.View"/>
を追加してView
タイプをインポートする必要があります。
<data>
<import type="Android.view.View"/>
<variable
name="viewModel"
type="xx.xx.MyViewModel"/>
</data>
ステップ1:create BindingAdapter :
@BindingAdapter("Android:visibility")
public static void setVisibility(final View view, @IdRes int layourId) {
SwitchCompat switcher = (SwitchCompat)view.getRootView().findViewById(layourId)
switcher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
view.setVisibility(isChecked ? View.VISIBLE : View.GONE);
}
}
}
ステップ2:R
クラスをデータバインディングデータセクションにインポートしますlayout.xml :
<data>
<import type="example.package.R"/>
</data>
ステップ3:カスタムビューを次のようにスイッチャーにバインドします。
<Android.support.v7.widget.SwitchCompat
Android:id="@+id/addTodo_switch_remind"/>
<LinearLayout
Android:visibility="@{R.id.addTodo_switch_remind">