2017-08-04 37 views
0

我正在Android項目中,我有一個設備列表,我想顯示感謝基礎適配器。每個設備都有一個亮度級別,我想用搜索欄進行修改。 我試圖識別設備尋求與這樣的標籤欄:發送數據綁定ID與標籤不工作

<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的標籤以獲取該對象,我得到以下錯誤:

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代替beeing的ampoule.idx值...

的任何想法,我應該怎麼做?

謝謝

回答

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)}" /> 
+0

不,仍然無法正常工作... –

0

我想你忘了綁定步驟。綁定後,您的View標籤應該被正確設置。如果您創建了綁定,則可能需要調用binding.executePendingBindings()以使標記值在下一行之前初始化。否則,它會延遲到下一幀,以允許在更新視圖之前累積綁定值更改。

一個活動,你應該膨脹的佈局是這樣的:

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

如果從不同的位置誇大它,你可以使用靜態inflaters。例如,從片段:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) { 
    MyLayoutBinding binding = MyLayoutBinding.inflate(inflater, container, false); 
    binding.setAmpoule(new LightDevice()); 
    return binding.getRoot(); 
}