标签: android-databinding

如何使用Android数据绑定库制作粗体文本

非常基本,我想根据是否读取文本,使消息标题变为粗体.我似乎找不到解决方案.

这是我的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 android-databinding

12
推荐指数
3
解决办法
6699
查看次数

Android上的Dagger 2,错过了错误消息

我在我的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

12
推荐指数
1
解决办法
2169
查看次数

如何使用数据绑定在checkChanged事件上绑定RadioGroup上的方法

我正在互联网上搜索如何执行新的酷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)

我如何附上处理方法将被称为上RadioGroupcheckChnged事件将触发使用数据绑定?

我尝试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 android-radiogroup android-databinding

12
推荐指数
5
解决办法
1万
查看次数

android数据绑定:如何避免以编程方式触发的onCheckedChanged

我现在正试图在我的项目中使用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)

data-binding checkbox android android-databinding

12
推荐指数
4
解决办法
7137
查看次数

Androidx和数据绑定

我正在将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

12
推荐指数
3
解决办法
9327
查看次数

Jetpack Compose 预览中的 ViewDataBinding XML 文件

我无法在 Jetpack Compose 版本 1.0.5 中预览带有数据的 ViewDataBinding

我设法使用:

  1. 没有<layout>标签的Xml 文件感谢:/sf/answers/4691181141/

片段.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)
  1. 带有<layout>标签但没有<data>标签的 Xml 文件,感谢:/sf/answers/4595762811/

片段.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)

xml android android-databinding android-jetpack-compose

12
推荐指数
0
解决办法
2014
查看次数

应该在MVVM中的Activity/Fragment和ViewModel中做什么

我们公司一直在使用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)

java android mvvm android-databinding

11
推荐指数
1
解决办法
7401
查看次数

数据绑定:如何将 xml 中的上下文传递给方法?

安卓工作室 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()

android android-databinding

11
推荐指数
2
解决办法
6344
查看次数

使用ViewModel和DataBinding更新UI

我正在尝试学习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

11
推荐指数
1
解决办法
5109
查看次数

必需的 DataBindingComponent 在类 AgentDetailsActivityBindingImpl 中为 null

在我的 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 android-databinding

11
推荐指数
4
解决办法
6574
查看次数