为什么我在checkbox.getTag()上得到java.lang.ClassCastException?

时间:2018-01-17 23:59:54

标签: java android android-recyclerview

你能告诉我为什么我的代码无效吗?它曾经工作正常,现在我正在从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();

3 个答案:

答案 0 :(得分:1)

您似乎正在设置Integer类型对象作为复选框的标记对象,并尝试将其转换为SelectPhoneContact中的OnClickListener对象。

答案 1 :(得分:1)

如果您需要两个代码,请使用the two-parameter setTag()the one-parameter getTag()

或者,创建一个保存数据的对象(视图持有者模式),并使用您正在使用的方法将其与标记相关联。

答案 2 :(得分:0)

checkbox.getTag()会以Integer格式返回数据,并且您正试图将其转换为SelectPhoneContact,这就是为什么您获得ClassCastException因为您试图投射一个子类的对象,它不是一个实例。