你能告诉我为什么我的代码无效吗?它曾经工作正常,现在我正在从listView
转换为recyclerView
我得到了:
java.lang.ClassCastException: java.lang.Integer cannot be cast to com.app.SelectPhoneContact
无论我的recyclerView
中有哪个复选框,都应该toast
检查那些复选框的相应数字。
Button btnGetItem = (Button) findViewById(R.id.btnGetItem);
btnGetItem.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//loop through the Matching Contacts
int count = MatchingContactsAsArrayList.size();
for (int i = 0; i < count; i++) {
//for each Matching Contacts row in the recyclerview
LinearLayout itemLayout = (LinearLayout) recyclerView.getChildAt(i); // Find by under LinearLayout
//for each Matching Contacts checkbox
CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact);
//get other data related to the selected contact - name and number
SelectPhoneContact data = (SelectPhoneContact) checkbox.getTag();
//if that checkbox is checked, then get the phone number
if (checkbox.isChecked()) {
Toast.makeText(NewContact.this, data.getPhone(), Toast.LENGTH_LONG).show();
}
}
}
});
错误在第303行,即:
SelectPhoneContact data = (SelectPhoneContact) checkbox.getTag();
答案 0 :(得分:1)
您似乎正在设置Integer
类型对象作为复选框的标记对象,并尝试将其转换为SelectPhoneContact
中的OnClickListener
对象。
答案 1 :(得分:1)
如果您需要两个代码,请使用the two-parameter setTag()
和the one-parameter getTag()
。
或者,创建一个保存数据的对象(视图持有者模式),并使用您正在使用的方法将其与标记相关联。
答案 2 :(得分:0)
checkbox.getTag()
会以Integer
格式返回数据,并且您正试图将其转换为SelectPhoneContact
,这就是为什么您获得ClassCastException
因为您试图投射一个子类的对象,它不是一个实例。