Java 未重写从ArrayAdapter扩展的添加(对象)。因为它,我不能称之为mtd

Java 未重写从ArrayAdapter扩展的添加(对象)。因为它,我不能称之为mtd,java,android,android-arrayadapter,overriding,Java,Android,Android Arrayadapter,Overriding,对于ArrayAdapter类中的add()方法,我得到一个错误“error:Method cannot override Method from superclass”。删除注释没有帮助 package com.example.den_2.json_example; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nulla

对于ArrayAdapter类中的add()方法,我得到一个错误“error:Method cannot override Method from superclass”。删除注释没有帮助

package com.example.den_2.json_example;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class ContactAdapter extends ArrayAdapter {
    List list = new ArrayList();
    public ContactAdapter(Context context, int resource) {
        super(context, resource);
    }

    @Override // ERROR: Method cannot override method from superclass
    public void add(Contacts object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Nullable
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        row = convertView;
        ContactHolder contactHolder;

        if(row==null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.row_layout,parent,false);
            contactHolder = new ContactHolder();
            contactHolder.tx_name = (TextView) row.findViewById(R.id.tx_name);
            contactHolder.tx_email = (TextView) row.findViewById(R.id.tx_email);
            contactHolder.tx_mobile = (TextView) row.findViewById(R.id.tx_mobile);
            row.setTag(contactHolder);
        }
        else{
            contactHolder = (ContactHolder) row.getTag();
        }

        Contacts contacts = (Contacts) this.getItem(position);
        contactHolder.tx_name.setText(contacts.getName());
        contactHolder.tx_email.setText(contacts.getEmail());
        contactHolder.tx_mobile.setText(contacts.getMobile());
        return row;
    }

    static class ContactHolder
    {
        TextView tx_name, tx_email, tx_mobile;
    }
}

不要覆盖它。只需在自己的add方法中使用composition并调用arrayadapter的add方法

请使用BaseAdapter而不是ArrayAdapter:

    public class ContactAdapter extends BaseAdapter {
            private List<Contacts> list = new ArrayList<Contacts>();
            private Context mContext;
            public ContactAdapter(Context context, List<Contacts> list) {
                this.mContext=context;
                this.list=list;
            }

           /* @Override // ERROR: Method cannot override method from superclass
            public void add(Contacts object) {
                super.add(object);
                list.add(object);
            }*/
//Your custom add Function for this adapter
            public void add(Contacts object){
                list.add(object);
                notifyDataSetChanged();
            }

            @Override
            public int getCount() {
                return list.size();
            }

            @Nullable
            @Override
            public Contacts getItem(int position) {
                return list.get(position);
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            @NonNull
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View row;
                row = convertView;
                ContactHolder contactHolder;

                if(row==null)
                {
                    LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    row = layoutInflater.inflate(R.layout.row_layout,parent,false);
                    contactHolder = new ContactHolder();
                    contactHolder.tx_name = (TextView) row.findViewById(R.id.tx_name);
                    contactHolder.tx_email = (TextView) row.findViewById(R.id.tx_email);
                    contactHolder.tx_mobile = (TextView) row.findViewById(R.id.tx_mobile);
                    row.setTag(contactHolder);
                }
                else{
                    contactHolder = (ContactHolder) row.getTag();
                }

                Contacts contacts = (Contacts) this.getItem(position);
                contactHolder.tx_name.setText(contacts.getName());
                contactHolder.tx_email.setText(contacts.getEmail());
                contactHolder.tx_mobile.setText(contacts.getMobile());
                return row;
            }

            static class ContactHolder
            {
                TextView tx_name, tx_email, tx_mobile;
            }
        }
公共类ContactAdapter扩展了BaseAdapter{
私有列表=新的ArrayList();
私有上下文;
公共ContactAdapter(上下文、列表){
this.mContext=上下文;
this.list=list;
}
/*@Override//错误:方法无法从超类重写方法
公共无效添加(联系人对象){
super.add(object);
列表。添加(对象);
}*/
//此适配器的自定义添加函数
公共无效添加(联系人对象){
列表。添加(对象);
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回list.size();
}
@可空
@凌驾
公共联系人getItem(内部位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
查看行;
行=转换视图;
接触器夹持器;
if(行==null)
{
LayoutInflater LayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
行=布局更平坦。充气(R.layout.row\u布局,父级,false);
contactHolder=新的contactHolder();
contactHolder.tx_name=(TextView)row.findViewById(R.id.tx_name);
contactHolder.tx_email=(TextView)row.findViewById(R.id.tx_email);
contactHolder.tx_mobile=(TextView)row.findViewById(R.id.tx_mobile);
row.setTag(触点保持器);
}
否则{
contactHolder=(contactHolder)行。getTag();
}
Contacts Contacts=(Contacts)this.getItem(position);
contactHolder.tx_name.setText(contacts.getName());
contactHolder.tx_email.setText(contacts.getEmail());
contactHolder.tx_mobile.setText(contacts.getMobile());
返回行;
}
静态类接触器座
{
TextView发送姓名、发送电子邮件、发送手机;
}
}

为此使用BaseAdapter而不是ArrayAdapter。我不明白。我应该删除注释以便它是我自己的方法吗?然后我应该在里面插入add方法?但是ArrayAdapter类的add()方法不是可以重写的吗?不,你可以像adapter.add(someObject)一样使用ArrayAdapter的add()函数。但是不能重写它。那么你的意思是说我可以通过一个对象调用这个函数,但是我不能重写它?所以,在创建该方法时,我不应该用@overridable注释它?这不会显示一个错误吗?您不能在ArrayAdapter中使用相同的有趣名称和参数重写make函数。但是我对ArrayAdapter类的其他函数,如getcount()和getItem()以及其他函数都这样做了