簡體   English   中英

java.lang.ClassCastException,嘗試使用相同的自定義適配器有兩個活動

[英]java.lang.ClassCastException, trying to have two activites using the same custom adapter

我有兩個活動NewContact.javaViewContact.java ,我希望使用相同的custom adapter因為這兩個活動非常相似。

但是我收到以下錯誤並且我的應用程序崩潰了:

AndroidRuntime: FATAL EXCEPTION: main
java.lang.ClassCastException: com.example.chris.tutorialspoint.ViewContact cannot be cast to com.example.chris.tutorialspoint.NewContact

我在這里閱讀了很多主題AndroidRuntime: FATAL EXCEPTION: , java.lang.ClassCastException帖子,但我不知道如何調整答案以滿足我的需要。

這是我的適配器中的getView代碼。 我知道問題出在以下幾行:

    viewHolder.check.setOnCheckedChangeListener((NewContact) _c);
    viewHolder.check.setOnCheckedChangeListener((ViewContact) _c);

如果我刪除其中一行,那么custom adapter適用於剩余的活動,但我希望它適用於兩個活動, NewContactViewContact

 @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        System.out.println("getView number is :" + i + "convertView is : " + convertView);
        //we're naming our convertView as view
        //  View view = convertView;
        ViewHolder viewHolder = null;

        if (convertView == null) {

            //if there is nothing there (if it's null) inflate the view with the layout
            LayoutInflater li = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = li.inflate(R.layout.phone_inflate_listview, null);

            viewHolder = new ViewHolder();
            //      So, for example, title is cast to the name id, in phone_inflate_listview,
            //      phone is cast to the id called no etc
            viewHolder.title = (TextView) convertView.findViewById(R.id.name);
            viewHolder.phone = (TextView) convertView.findViewById(R.id.no);
            viewHolder.invite = (Button)  convertView.findViewById(R.id.btnInvite);
            viewHolder.check = (CheckBox) convertView.findViewById(R.id.checkBoxContact);
            // viewHolder.check.setVisibility(View.GONE);

            //remember the state of the checkbox
            viewHolder.check.setOnCheckedChangeListener((NewContact) _c);
            viewHolder.check.setOnCheckedChangeListener((ViewContact) _c);

            convertView.setTag(viewHolder);

        } else {

            viewHolder = (ViewHolder) convertView.getTag();

        }
//        store the holder with the view
        final SelectPhoneContact data = (SelectPhoneContact) arraylist.get(i);
        //in the listview for contacts, set the name
        viewHolder.title.setText(data.getName());
        //in the listview for contacts, set the number
        viewHolder.phone.setText(data.getPhone());

        ////*********************

        //for every phone number in the MatchingContactsAsArrayList array list...
        for (int number = 0; number < MatchingContactsAsArrayList.size(); number++) {

            //if a phone number is in our array of matching contacts
            if (MatchingContactsAsArrayList.contains(data.getPhone()))

            {
                //if a matching contact, no need to show the Invite button
                viewHolder.invite.setVisibility(View.GONE);
                System.out.println("it's a match: phoneNumberofContact is : " + data.getPhone());
                //once a matching contact is found, no need to keep looping x number of time, move onto next contact
                break;

            }

            else {
                //if not a matching contact, no need to show the check box
                viewHolder.check.setVisibility(View.GONE);

            }

        }


        viewHolder.check.setChecked(data.isSelected());



        viewHolder.check.setTag(data);

        // Return the completed view to render on screen

        return convertView;

    }

您不需要將該Context轉換為特定的Activity類型。 setOnCheckedChangeListener()方法只需要一個OnCheckedChangeListener ,如果兩個類都實現了該接口,則您只需要一個將Context轉換為OnCheckedChangeListener

viewHolder.check.setOnCheckedChangeListener((OnCheckedChangeListener) _c);

在構造函數中添加instanceof檢查以確保傳遞的Context確實是OnCheckedChangeListener可能是謹慎的OnCheckedChangeListener ,這將具有更快失敗的好處,並讓您有機會拋出帶有更多信息的Exception消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM