发送数据绑定ID与标记不起作用

时间:2017-08-04 14:10:35

标签: android baseadapter android-databinding

我正在开发一个Android项目,我有一个我想要显示的设备列表,这要归功于基础适配器。每个设备都有一个亮度级别,我想用搜索栏修改。 我试图用这样的标签识别设备搜索栏:

<SeekBar
                    android:id="@+id/seekBar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:max="100"
                    android:tag="@{Integer.toString(ampoule.idx)}" />

这是我的安瓿对象:

private String Type ;
private int LevelInt;
private String hueColor;
private String Name;
private int idx;

和绑定:

<data>
    <variable
        name="ampoule"
        type="com.example.****.***.containers.LightDevice"
        />
</data>

现在,当我尝试获取baseadapter的标记以获取Object时,我收到以下错误:

FATAL EXCEPTION: main
                                                                            Process: com.example.***.***, PID: 9057
                                                                            java.lang.NumberFormatException: Invalid int: "binding_4"

这是我得到标签的地方:

    @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    setDimmableLevel(seekBar.getTag().toString(),progress);
}

private void setDimmableLevel(String idx, final int progress) {
    Map<String, String> queryParams = new HashMap<>();
    Log.d("TAG", "valeur idx : "+idx);
    final LightDevice light = LightList.getInstance().getLight(Integer.parseInt(idx));

错误是我的标签值是binding_4而不是apoule.idx值......

我该怎么办?

谢谢

2 个答案:

答案 0 :(得分:0)

请试试这个,我认为它的类型转换相关问题,希望它的作品。

<SeekBar
                    android:id="@+id/seekBar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:max="100"
                    android:tag="@{String.valueof(ampoule.idx)}" />

答案 1 :(得分:0)

我想你忘记了绑定步骤了。绑定后,应正确设置View标签。如果您已创建绑定,则可能需要调用 var guess = document.body.onkeypress = function(event){ console.log(event); document.getElementById("change").innerHTML = String.fromCharCode(event.keyCode); var letter = document.getElementById('change'); if(letter.innerHTML==="h"){ console.log('hi'); } else { console.log("nothing"); } }; 以在下一行之前初始化标记值。否则,它会延迟到下一帧,以允许在更新视图之前累积绑定值更改。

对于活动,您应该像这样膨胀布局:

binding.executePendingBindings()

如果从其他位置对其进行充气,则可以使用静态充气器。例如,来自片段:

@Override
public void onCreate(...) {
    super.onCreate(...);
    MyLayoutBinding binding = DataBindingUtil.setContentView(this, R.layout.my_layout);
    binding.setAmpoule(new LightDevice());
}