我在项目中从旧if(objForm.checkbox.checked) {
console.log("the box is checked")
} else {
console.log("the box is not checked")
}
迁移到ListView
。我已经决定使用数据绑定来绑定列表值,但是我在为文本框设置自定义文本范围时遇到了一些问题。
请查看这段代码(这是旧的ListBox适配器的完成方式):
RecyclerView
基本上,我的@Override
public View getView(int position, @Nullable View convertView, ViewGroup parent) {
...
Typeface tf = Typeface.createFromAsset(convertView.getContext().getAssets(), "fonts/fontawesome.ttf");
SpannableStringBuilder textCategory = new SpannableStringBuilder((item != null ? item.getCategoryIconName() : null) + " " + item.getCategoryName());
textCategory.setSpan (new CustomTypefaceSpan("", tf), 0, 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
viewHolder.eventCategory.setText(textCategory);
...
}
用于为单个CustomTypeFaceSpan
设置多种字体。如何使用数据绑定实现相同的功能?可以使用TextView
吗?
我的尝试:
BindingAdapter
绑定适配器:
<variable name="categoryText" type="String"/>
<variable name="data" type="Event"/>
<TextView
android:id="@+id/event_category_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:text="@{data.categoryIconName + data.categoryName}"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="@color/colorEventCategoryText"
app:customFunction="@{categoryText}"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
问题:@BindingAdapter({"customFunction"})
public static void setSpan(TextView textView, String categoryText)
{
Typeface tf = Typeface.createFromAsset(textView.getContext().getAssets(), "fonts/fontawesome.ttf");
SpannableStringBuilder textCategory = new SpannableStringBuilder(categoryText);
textCategory.setSpan (new CustomTypefaceSpan("", tf), 0, 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(textCategory);
}
始终为空。有任何想法吗? TextView被正确绑定,因为没有自定义函数它会显示文本。
我的列表适配器:
categoryText
答案 0 :(得分:2)
使用自定义属性,如:
在xml中:
<data>
<variable
name="name"
type="String"></variable>
</data>
........
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
app:customFunction="@{name}"
/>
在活动类
中.............
ActivityMainBinding binding = DataBindingUtil........
binding.setName("Something");
...................
@BindingAdapter("customFunction")
public static void myCustomFunction(TextView textView, String name){
Log.d("MainActivity", "custom function called");
String nameCaps = name.toUpperCase();
textView.setText(nameCaps);
}
从xml创建Textview时将调用 myCustomFunction(..)
。您可以使用自定义功能将Span设置为您的视图。