【问题标题】:Data binding- get resource by dynamic id - Android数据绑定 - 通过动态 id 获取资源 - Android
【发布时间】:2017-07-15 05:19:16
【问题描述】:

我有ErrorEmptyPage.java

public class ErrorEmptyPage {

    private int iconId;
    private int messageId;
    private int actionTextId;

    public int getIconId() {
        return iconId;
    }

    public void setIconId(int iconId) {
        this.iconId = iconId;
    }

    public int getMessageId() {
        return messageId;
    }

    public void setMessageId(int messageId) {
        this.messageId = messageId;
    }

    public int getActionTextId() {
        return actionTextId;
    }

    public void setActionTextId(int actionTextId) {
        this.actionTextId = actionTextId;
    }

}

然后我填写我的activity

        ErrorEmptyPage errorEmptyPage = new ErrorEmptyPage();
        errorEmptyPage.setIconId(iconId);
        errorEmptyPage.setMessageId(messageId);<=== for example R.string.fetching_data_failed
        errorEmptyPage.setActionTextId(actionTextId);
activityStartBinding.contentInstagramEmpty.setMessageEmptyView(errorEmptyPage);

在我的xml 中,我有一个include 项目,其中包含xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="messageEmptyView"
            type="ir.jmostafa.appportalmostafa.start.models.ErrorEmptyPage" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical">

        <com.joanzapata.iconify.widget.IconTextView
            android:id="@+id/empty_view_icon_icontextview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{@string/messageEmptyView.iconId}"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/empty_view_message_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@{@string/messageEmptyView.messageId}" />

        <Button
            android:id="@+id/empty_view_action_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{@string/messageEmptyView.actionTextId}"
            android:visibility="gone" />

    </LinearLayout>
</layout>

然后我填写包括xml的项目,如下所示:

android:text="@{@string/messageEmptyView.messageId}"

但是得到我下面的错误:

【问题讨论】:

    标签: android data-binding android-databinding


    【解决方案1】:

    尝试关注

    <com.joanzapata.iconify.widget.IconTextView
                android:id="@+id/empty_view_icon_icontextview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{String.valueOf(messageEmptyView.iconId)}"
                android:textSize="20sp" />
    

    并且您必须在 .. 中导入下面的行,如下所示。

    <data>
            <variable
                name="messageEmptyView"
                type="ir.jmostafa.appportalmostafa.start.models.ErrorEmptyPage" />
    
    <import type="java.lang.string" />
        </data>
    

    更新答案。

    如果你想从 String.xml 获取用户值,你必须像下面这样写,

    android:text="@{@string/invitation_invited_by_user(invitation.occasion.user.firstName, invitation.occasion.user.lastName)}"
    

    和来自 String.xml 的值,如

    <string name="invitation_invited_by_user" formatted="false">%s %s</string>
    

    【讨论】:

    • 你已经为你的iconId 做同样的事情,因为它也是int,查看我更新的答案。
    • 我无法从字符串 xml 中获取任何值。我只看到数字。
    • 您到底想要什么?您想显示响应中的文本还是想显示 string.xml 中的文本?
    • 如果您想使用 String.xml 文件中的文本,请查看我的更新答案。
    【解决方案2】:
     android:text=@{String.valueOf (messageEmptyView.messageId)}
    

    您的 messageId 是int,您不能将int 放入android:text

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多