我想要一个 EditText 可以根据可编辑或不可编辑的事实来更改其背景。
如果 EditText 是“可编辑的”,它将具有默认的 EditText 背景可绘制,如果不是,它将获得透明背景(看起来像一个简单的 textView)。
我已经这样做了:
android:background="@{viewModel.editable ? android.R.drawable.edit_text : android.R.color.transparent}"
Run Code Online (Sandbox Code Playgroud)
而且它在编译或执行期间不会引发任何异常,但我的 EditText 似乎没有背景,并且当修改变量“editable”时没有任何变化。
我的变量 editable 是一个可绑定变量,定义如下:
@Bindable
boolean editable;
public boolean isEditable() {
return editable;
}
public void setEditable(boolean editable) {
this.editable = editable;
notifyPropertyChanged(BR.editable);
}
Run Code Online (Sandbox Code Playgroud)
有人知道根据布尔值提供可绘制资源吗?
有没有办法用 LiveData 和数据绑定来做这样的事情?
ViewModel 有这个属性:
val weather: LiveData<UnitSpecificCurrentWeatherEntry>
Run Code Online (Sandbox Code Playgroud)
我想在布局中做什么:
<TextView
android:id="@+id/textView"
android:text="@{viewmodel.weather.value.someProperty}"... />
Run Code Online (Sandbox Code Playgroud)
这是否可以以任何方式实现,或者我是否必须针对所包含对象的每个属性将 LiveData 中包含的对象拆分为多个对象?
我正在使用带有 mmvm+livedata+数据绑定的 recyclerview。每次旋转后,我都可以看到旧的物品卡在后面作为背景。
我可以看到适配器具有正确数量的项目,并且实际上适配器仅显示和滚动最新数据。但在后台您可以看到旧列表。
代码非常标准和简单 - 带有数据绑定项的简单的 adatper/recyclervyew。
我在将 onTextChanged 添加到包含布局中的 TextInputEditText 时遇到问题。
有一个 base_edittext_view.xml 如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/colorPrimaryText"
android:background="@drawable/textinputlayout_background"
app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">
<android.support.design.widget.TextInputEditText
android:id="@+id/edittextItem"
style="@style/TextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/input_border_bottom"
android:cursorVisible="true"
android:drawableEnd="@drawable/ic_user"
android:drawablePadding="@dimen/padding_medium"
android:gravity="center|left"
android:hint="@string/email"
android:inputType="textEmailAddress"
android:maxLength="50"
android:paddingBottom="@dimen/padding_medium"
android:paddingTop="@dimen/padding_medium"
android:paddingEnd="@dimen/padding_xlarge"
android:paddingStart="@dimen/padding_medium"
android:textColor="@color/edittext_text_color"
android:textColorHint="@color/edittext_hint_text_color"
android:textSize="@dimen/textsize_medium"
/>
<!---->
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
我想向包含 base_edittext_view.xml 的布局添加一个 onTextChanged 侦听器。
android:onTextChanged="@{(text, start, before, count) -> viewModel.onTextChanged(text)}"
Run Code Online (Sandbox Code Playgroud)
添加 onClick 以包含布局没有问题,但对于 onTextChanegd 我不知道如何实现它。
笔记:
<include
android:id="@+id/edittextEmail"
layout="@layout/edittext_email_base_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding_xxxxlarge"
/>
Run Code Online (Sandbox Code Playgroud) android android-layout android-databinding android-include addtextchangedlistener
当我尝试在新创建的测试项目 ( dataBinding {enable=true}) 中启用数据绑定时,我收到消息
Could not set unknown property 'enable' for object of type com.android.build.gradle.internal.dsl.DataBindingOptions.
Run Code Online (Sandbox Code Playgroud)
数据绑定也没有自动完成功能。(但它是为了app.dataBinding- 但我不明白如何使用它)
我的 app.gradle:
android {
compileSdkVersion 28
dataBinding {
enable = true
}
defaultConfig {
applicationId "com.testapp"
minSdkVersion 19
targetSdkVersion 28
}
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
}
Run Code Online (Sandbox Code Playgroud)
和项目gradle:
buildscript {
ext{
kotlin_version = '1.3.21'
gradleVersion = '3.1.0'
}
...
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
Run Code Online (Sandbox Code Playgroud)
Android …
如何在kotlin中绑定点击actionSearch软键盘按钮的数据@BindingAdapter?
我的编辑文本:
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:padding="10dp"
android:text="@{viewModel.text}"
android:hint="@string/edit_text_hint"
android:imeOptions="actionSearch"/>
Run Code Online (Sandbox Code Playgroud)
我的视图模型:
class RelationListViewModel: BaseViewModel(){
//..
val text: MutableLiveData<String> = MutableLiveData()
Run Code Online (Sandbox Code Playgroud) 正如我们在此处阅读的那样,ViewBinding和之间的差异非常小Databinding。
数据绑定库只处理使用
<layout>标签创建的数据绑定布局。视图绑定不支持布局变量或布局表达式,因此它不能用于将布局与 XML 中的数据绑定。
开发人员是否应该注意其他任何差异?为什么要创造出如此微小差异的新东西?
有人请解释
任何人都可以指导我如何使用AppCompatAutoCompleteTextView 的数据绑定来设置适配器并获取值
data-binding autocompletetextview android-layout android-studio android-databinding
How can I change the backgroudColor ofselectedItem in recyclerView adapter when I use android databinding?
this is my Adapte,and class CategoyItemClickListener is implemened for handling item clicks :
class ProgramCatAdapter(
val mContext: Context,
val mData: MutableList<CategoryResponse>,
val clickListener: CategoyItemClickListener
) : RecyclerView.Adapter<ProgramCatAdapter.CategoryViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): CategoryViewHolder {
return CategoryViewHolder.from(parent)
}
override fun getItemCount(): Int {
return mData.size
}
override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
holder.bind(
mData[position],
clickListener,
position
)
}
fun getItem(position: Int): …Run Code Online (Sandbox Code Playgroud) 我最近升级到 Android Studio 4.0.1 并且我的构建不断失败并显示以下消息:
不推荐使用选项“android.databinding.enableV2”。当前默认值为“真”。它已从当前版本的 Android Gradle 插件中删除。删除了数据绑定 v1。
我尝试添加:
android.enableExperimentalFeatureDatabinding = false
android.databinding.enableV2=false
Run Code Online (Sandbox Code Playgroud)
到 gradle.properties 和 gradle-wrapper.properties。但都没有解决问题。是否有必须从 build.gradle 添加或删除的内容?
android-build build.gradle android-databinding android-studio-4.0