非常基本,我想根据是否读取文本,使消息标题变为粗体.我似乎找不到解决方案.
这是我的XML代码:
<TextView
android:text="@{message.title}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toLeftOf="@+id/timestamp"
android:textSize="18sp"
android:textStyle='@{message.isRead() ? "bold" : "normal"}'
android:textColor='@{message.isRead() ? 0xff313131 : 0xff0662ab}' />
Run Code Online (Sandbox Code Playgroud)
颜色变化很好,只有粗体文字给我一些问题.
错误:任务':app:compileDebugJavaWithJavac'的执行失败.
java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****msg:在android.widget.TextView上找不到参数类型为java.lang.String的属性'android:textStyle'的setter.file:D:...... xml loc:39:41 - 39:79****\data binding error****
我在我的Android项目中使用Dagger 2,但我在调试时遇到问题.我知道编译失败是因为我的匕首2设置中的错误(以前有过)但是几乎不可能跟踪它,因为我没有得到正确的错误消息告诉我问题出在哪里.我得到的只是显示注释处理失败的消息.沿着:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Error:(14, 28) error: cannot find symbol class BR
Error:(17, 40) error: package com.some.package.databinding does not exist
Error:(17, 51) error: cannot find symbol class DaggerSomeComponent
...
Run Code Online (Sandbox Code Playgroud)
也许它与某些事实有关,我也在使用数据绑定!?
我正在使用Dagger 2.5,Gradle插件2.1.2和android-apt 1.8.
谢谢你的帮助!
android annotation-processing dagger-2 android-databinding kapt
我正在互联网上搜索如何执行新的酷Android数据绑定RadioGroup,我没有找到一篇关于它的博客文章.
它是一个简单的场景,基于所选的单选按钮,我想使用android数据绑定附加一个回调事件.我没有在xml部分找到允许我定义回调的任何方法.
就像这里是我的RadioGroup:
<RadioGroup
android:id="@+id/split_type_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:checkedButton="@+id/split_type_equal"
android:gravity="center"
<!-- which tag ? -->
android:orientation="horizontal">
...
</RadioGroup>
Run Code Online (Sandbox Code Playgroud)
我如何附上处理方法将被称为上RadioGroup的checkChnged事件将触发使用数据绑定?
我尝试onClick在布局文件中使用(不知道它是否相同)并在Activity中定义方法并在布局文件中使用它来定位它:
<variable
name="handler"
type="com.example.MainActivity"/>
...
<RadioGroup
android:onClick="handler.onCustomCheckChanged"
.. >
Run Code Online (Sandbox Code Playgroud)
并定义了这样的方法onCustomCheckChanged:
public void onCustomCheckChanged(RadioGroup radio, int id) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,它给了我编译错误:
错误:(58,36)侦听器类android.view.View.OnClickListener与方法onClick不匹配任何方法handler.onCustomCheckChanged的签名
我见过很多博客提到它是可能的,RadioGroup但他们没有真正说出如何.我怎么处理这个data-binding?
我现在正试图在我的项目中使用android数据绑定,遇到这种问题,例如:我有3个复选框作为复选框组,如果选中第一个复选框,则变量type为1.第二个使得type为2 ,第三个使得type3.所以我以这种方式实现代码.
// layout.xml
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="50dp"
android:layout_height="50dp"
android:checked="@{userInfoViewModel.type == 1}"
android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 1)}"
/>
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="50dp"
android:layout_height="55dp"
android:checked="@{userInfoViewModel.type == 2}"
android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 2)}"
/>
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="50dp"
android:layout_height="55dp"
android:checked="@{userInfoViewModel.type == 3}"
android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 3)}"
/>
Run Code Online (Sandbox Code Playgroud)
// viewModel
public void onTypeChecked(boolean checked, int i) {
if (checked) {
// if it is a check. set the type
type.set(i);
} else {
// if it is a uncheck. set type to …Run Code Online (Sandbox Code Playgroud) 我正在将Android P测试的依赖项迁移到androidx依赖项.由于一些不太清楚的原因,我的项目不再编译(并且我不会提供细节以避免明显的问题).我发现(通过gradlew dependencies)数据绑定使用"oldschool"依赖android.arch.lifecycle:runtime:1.0.3而不是androidx.lifecycle:lifecycle-runtime:2.0.0-beta01.我想这可能是一个原因.
知道如何强制使用新的包名/依赖项吗?
android android-support-library android-databinding android-architecture androidx
我无法在 Jetpack Compose 版本 1.0.5 中预览带有数据的 ViewDataBinding
我设法使用:
片段.kt
@Preview
@Composable
fun PreviewExample() {
AndroidViewBinding(MyViewBinding::inflate)
}
Run Code Online (Sandbox Code Playgroud)
my_view.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
片段.kt
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
my_view_with_layout_tags.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout> …Run Code Online (Sandbox Code Playgroud) 我们公司一直在使用MVP模式开发Android应用程序.使用MVP,我们将所有业务逻辑放在演示者中,然后Activity/Fragment负责在从演示者接收事件回调时查看更新.
现在,我们决定使用Android Databinding尝试MVVM.看来,使用MVVM,我们可以将所有业务逻辑放在ViewModel中(就像MVP中的Presenter一样),并且还可以在一个对象中通知数据模型的任何更改视图.
但是,在我们的脑海中,这提出了一个问题,我们应该由Activity/Fragment处理什么?因为我们采用MVP模式来避免脂肪活动/碎片.我们不希望有苗条活动/片段,然后是胖视图模型.
到目前为止,我们认为我们可以通过Activity/Fragment来处理这些问题
每个更正,评论或建议都是受欢迎的,因为我对MVVM很新,即使它似乎与MVP类似.
谢谢.
还有一点问题
将MVVM与监听器(如MVP)结合起来是否可能并且是一种好的做法?例如
public class MainActivityViewModel extends BaseObservable {
MainActivityViewModelListener listener;
User user;
public void setMainActivityViewModelListener(MainActivityViewModelListener listener) {
this.listener = listener;
}
public void refreshUser(View v) {
// some user update via Internet
notifyPropertyChanged(BR.userAlias);
if (listener != null) {
listener.onUserRefreshed(user);
}
}
@Bindable
public void getUserAlias() {
return user.getAlias();
}
}
public interface MainActivityViewModelListener {
void onUserRefreshed(User user);
}
public class MainActivity implements MainActivityViewModelListener { …Run Code Online (Sandbox Code Playgroud) 安卓工作室 3.0。
这是我的自定义方法:
public static int getTileWidthDpInScreen(Context context) {
// some code here
return tileWidthDp;
}
Run Code Online (Sandbox Code Playgroud)
这里是我的带有数据绑定代码的 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="com.myproject.android.customer.util.GUIUtil" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="@{GUIUtil.getTileWidthDpInScreen()}"
android:layout_height="@dimen/preview_image_height"
android:scaleType="centerCrop"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
结果我得到错误:
e: java.lang.IllegalStateException: failed to analyze: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
data binding error msg:cannot find method getTileWidthDpInScreen() in class com.myproject.android.customer.util.GUIUtil
Run Code Online (Sandbox Code Playgroud)
这个错误是因为我没有在 method 中传递上下文getTileWidthDpInScreen()。
我如何获得XML上下文,并将它传递的方法:getTileWidthDpInScreen()?
我正在尝试学习View-model android,在我学习的第一阶段我试图通过使用视图模型和数据绑定来更新UI(Textview).在View模型中,我有一个aynctask回调,它将调用REST api调用,我正在输出,但我没有更新textview中的值.
我的viewmodel类
public class ViewModelData extends ViewModel {
private MutableLiveData<UserData> users;
public LiveData<UserData> getUsers() {
if (users == null) {
users = new MutableLiveData<UserData>();
loadUsers();
}
return users;
}
public void loadUsers() {
ListTask listTask =new ListTask (taskHandler);
listTask .execute();
}
public Handler taskHandler= new Handler() {
@Override
public void handleMessage(Message msg) {
UserData userData = (UserData) msg.obj;
users.setValue(userData);
}
};
Run Code Online (Sandbox Code Playgroud)
}
和主要课程
public class MainActivity extends AppCompatActivity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
private TextView fName;
@Override …Run Code Online (Sandbox Code Playgroud) android-databinding android-livedata android-viewmodel android-architecture-components
在我的 agent_details_activity.xml 中:
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="0dp"
android:layout_height="400dp"
app:agentImageUrl="@{item.url}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolBarContainer" />
Run Code Online (Sandbox Code Playgroud)
在活动中:
class AgentDetailsActivity : AppCompatActivity() {
private lateinit var binding: AgentDetailsActivityBinding
companion object {
val AGENT_DETAILS = AgentDetailsActivity::class.java.name + "_AGENT_DETAILS"
}
private val TAG = AgentDetailsActivity::class.java.name
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = AgentDetailsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.setHandler(this);
}
@BindingAdapter("agentImageUrl")
fun loadImage(view: ImageView, imageUrl: String) {
Glide.with(view.context)
.load(imageUrl)
.apply(RequestOptions().error(R.drawable.no_image))
.into(view)
}
Run Code Online (Sandbox Code Playgroud)
但在运行时我得到错误:
Shutting down VM
FATAL EXCEPTION: main
Process: com.android.testproject.android.kotlin.debug, PID: 24924
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.testproject.android.kotlin.debug/com.android.testproject.android.kotlin.coroutine_retrofit.ui.activity.AgentDetailsActivity}: java.lang.IllegalStateException: …Run Code Online (Sandbox Code Playgroud) android ×9
android-architecture-components ×1
androidx ×1
checkbox ×1
dagger-2 ×1
data-binding ×1
java ×1
kapt ×1
mvvm ×1
xml ×1