方法不会超过自定义Recyclerview适配器Android中超类的方法

时间:2018-12-05 06:21:22

标签: java android android-recyclerview

我有自定义类WORecyclerListAdapter,它扩展了RecyclerView.Adapter<WORecyclerListAdapter.ViewHolder>

我还有另一个自定义类ZWORecyclerListAdapter,它扩展了WORecyclerListAdapter

ZWORecyclerListAdapter扩展了WORecyclerListAdapter

这两个WORecyclerListAdapterZWORecyclerListAdapter各自的布局都不同。

下面是 WORecyclerListAdapter类:

public abstract class WORecyclerListAdapter extends RecyclerView.Adapter<WORecyclerListAdapter.ViewHolder> {

    protected ArrayList<WorkOrder> workorders;
    protected int currentSelectedWOPos;
    protected View currentSelectedView;
    protected boolean mTwoPane;

    public WORecyclerListAdapter(){

    }

    public WORecyclerListAdapter(ArrayList<WorkOrder> items, int selectedWOPos, boolean mTwoPane) {
       try{ workorders = items;
        this.currentSelectedWOPos = selectedWOPos;
           this.mTwoPane = mTwoPane;
       }catch(Exception e)
       { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error, e.getMessage());}
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        try{ view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.workorder_list_content, parent, false);
        }catch(Exception e)
        { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        try { holder.mItem = workorders.get(position);
        holder.mView.setSelected(position == currentSelectedWOPos && mTwoPane);
        if(position== currentSelectedWOPos && mTwoPane) {
            currentSelectedView = holder.mView;
        }
        holder.mIdView.setText(workorders.get(position).getDisplayableWorkOrderNum());
        holder.mContentView.setText(workorders.get(position).getShortText());
        holder.statusIcon.setImageResource(holder.mItem.getMobileObjStatusDrawable());
            holder.woTypeIcon.setImageResource(holder.mItem.getWOTypeDrawable());
        holder.priorityIcon.setImageResource(holder.mItem.getPriorityDrawable());
            if(holder.mItem.getBasicFnshDate() != null)
                holder.dueDateTxt.setText(Common.getFormattedDate(holder.mItem.getBasicFnshDate().getTime()));
            if(!holder.mItem.isAttachmentAvailable())
                holder.attachmentIcon.setVisibility(View.INVISIBLE);
            else
                holder.attachmentIcon.setVisibility(View.VISIBLE);
            if(holder.mItem.isErrorEntity()){
                holder.errorIndicator.setVisibility(View.VISIBLE);
            }else {
                holder.errorIndicator.setVisibility(View.GONE);
            }
        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int clickPos = holder.getAdapterPosition();
                if (clickPos != currentSelectedWOPos && mTwoPane) {
                    currentSelectedWOPos = clickPos;
                        if (currentSelectedView != null)
                            currentSelectedView.setSelected(false);
                        currentSelectedView = v;
                        v.setSelected(true);
                    onSelectWOListItem(clickPos);
                }
                if(!mTwoPane)
                    onSelectWOListItem(clickPos);

            }
        });
        }catch(Exception e)
        { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
    }

    public abstract void onSelectWOListItem(int position);

    public void onUnSelectWOListItem(int position){}

    @Override
    public int getItemCount() {
       try{ return workorders.size();
       }catch(Exception e)
       { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
    return 0;}

    public class ViewHolder extends RecyclerView.ViewHolder {
        public final View mView;
        public final View errorIndicator;
        public final TextView mIdView;
        public final TextView mContentView;
        public final ImageView statusIcon;
        public final ImageView priorityIcon;
        public final ImageView woTypeIcon;
        public final ImageView attachmentIcon;
        public final TextView dueDateTxt;
        public WorkOrder mItem;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            mIdView = (TextView) view.findViewById(R.id.id);
            mContentView = (TextView) view.findViewById(R.id.short_text);
            statusIcon = (ImageView) view.findViewById(R.id.status_icon);
            priorityIcon = (ImageView) view.findViewById(R.id.wo_priority_icon);
            woTypeIcon = (ImageView) view.findViewById(R.id.type_icon);
            attachmentIcon = (ImageView) view.findViewById(R.id.attach_icon);
            dueDateTxt = (TextView) view.findViewById(R.id.dueDateTxt);
            errorIndicator = view.findViewById(R.id.errorIndicator);
        }

        @Override
        public String toString() {
            try{
            return super.toString() + " '" + mContentView.getText() + "'";
            }catch(Exception e)
            { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
        return "";
        }
    }

}

下面是 ZWORecyclerListAdapter 类,它扩展了WORecyclerListAdapter

public class ZWORecyclerListAdapter extends WORecyclerListAdapter{


    public ZWORecyclerListAdapter(){
        super();

    }

    public ZWORecyclerListAdapter(ArrayList<WorkOrder> items, int selectedWOPos, boolean mTwoPane) {
        super();
        try{ workorders = items;
            this.currentSelectedWOPos = selectedWOPos;
            this.mTwoPane = mTwoPane;
        }catch(Exception e)
        { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error, e.getMessage());}
    }

    @Override
    public WORecyclerListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        try{ view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.z_workorder_list_content, parent, false);
        }catch(Exception e)
        { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error, e.getMessage());}
        //return new ViewHolder(view);
        return new WORecyclerListAdapter.ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        try { holder.mItem = workorders.get(position);
            holder.mView.setSelected(position == currentSelectedWOPos && mTwoPane);
            if(position== currentSelectedWOPos && mTwoPane) {
                currentSelectedView = holder.mView;
            }
            holder.mIdView.setText(workorders.get(position).getDisplayableWorkOrderNum());
            holder.mContentView.setText(workorders.get(position).getShortText());
            holder.statusIcon.setImageResource(holder.mItem.getMobileObjStatusDrawable());
            //holder.woTypeIcon.setImageResource(holder.mItem.getWOTypeDrawable());

            //-------------------------------------------------------------
            holder.locationTxt.setText(workorders.get(0).getFuncLocation());
            holder.typeTxt.setText(workorders.get(0).getOrderType());
            //-------------------------------------------------------------

            holder.priorityIcon.setImageResource(holder.mItem.getPriorityDrawable());
            if(holder.mItem.getBasicFnshDate() != null)
                holder.dueDateTxt.setText(Common.getFormattedDate(holder.mItem.getBasicFnshDate().getTime()));
            if(!holder.mItem.isAttachmentAvailable())
                holder.attachmentIcon.setVisibility(View.INVISIBLE);
            else
                holder.attachmentIcon.setVisibility(View.VISIBLE);
            if(holder.mItem.isErrorEntity()){
                holder.errorIndicator.setVisibility(View.VISIBLE);
            }else {
                holder.errorIndicator.setVisibility(View.GONE);
            }
            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int clickPos = holder.getAdapterPosition();
                    if (clickPos != currentSelectedWOPos && mTwoPane) {
                        currentSelectedWOPos = clickPos;
                        if (currentSelectedView != null)
                            currentSelectedView.setSelected(false);
                        currentSelectedView = v;
                        v.setSelected(true);
                        onSelectWOListItem(clickPos);
                    }
                    if(!mTwoPane)
                        onSelectWOListItem(clickPos);
                }
            });
        }catch(Exception e)
        { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
    }

    @Override
    public void onSelectWOListItem(int position) {

    }




    public class ViewHolder extends RecyclerView.ViewHolder {
        public final View mView;
        public final View errorIndicator;
        public final TextView mIdView;
        public final TextView mContentView;
        public final ImageView statusIcon;
        public final ImageView priorityIcon;
        //public final ImageView woTypeIcon;
        public final ImageView attachmentIcon;
        public final TextView dueDateTxt;
        public WorkOrder mItem;

        public final TextView locationTxt;
        public final TextView typeTxt;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            mIdView = (TextView) view.findViewById(R.id.id);
            mContentView = (TextView) view.findViewById(R.id.short_text);
            statusIcon = (ImageView) view.findViewById(R.id.status_icon);
            priorityIcon = (ImageView) view.findViewById(R.id.wo_priority_icon);
            //woTypeIcon = (ImageView) view.findViewById(R.id.type_icon);
            locationTxt = (TextView) view.findViewById(R.id.locationTxt);
            attachmentIcon = (ImageView) view.findViewById(R.id.attach_icon);
            dueDateTxt = (TextView) view.findViewById(R.id.dueDateTxt);
            errorIndicator = view.findViewById(R.id.errorIndicator);

            typeTxt = (TextView) view.findViewById(R.id.type_txt);
        }

        @Override
        public String toString() {
            try{
                return super.toString() + " '" + mContentView.getText() + "'";
            }catch(Exception e)
            { DliteLogger.WriteLog(this.getClass(), AppSettings.LogLevel.Error,e.getMessage());}
            return "";
        }
    }


}


When I override "onBindViewHolder" method in ZWORecyclerListAdapter class it showing as "method doesnot override method of super class"

This "onBindViewHolder" method is already there in "WORecyclerListAdapter" class.

如何在onBindViewHolder中覆盖ZWORecyclerListAdapter方法?

我已经尝试过,但是没有解决。 请帮助我。谢谢。

1 个答案:

答案 0 :(得分:-1)

当您的ZWORecyclerListAdapter扩展了WORecyclerListAdapter并扩展了RecyclerView.Adapter<WORecyclerListAdapter.ViewHolder>时,您的onBindViewHolder方法的第二个参数必须是WORecyclerListAdapter.ViewHolder。而且您使用的是ZWORecyclerListAdapter自己的ViewHolder,它将无法正常工作。

您可能想创建一个通用的ViewHolder,这对两个适配器都适用。