我有自定义类WORecyclerListAdapter
,它扩展了RecyclerView.Adapter<WORecyclerListAdapter.ViewHolder>
。
我还有另一个自定义类ZWORecyclerListAdapter
,它扩展了WORecyclerListAdapter
ZWORecyclerListAdapter
扩展了WORecyclerListAdapter
。
这两个WORecyclerListAdapter
和ZWORecyclerListAdapter
各自的布局都不同。
下面是 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
方法?
我已经尝试过,但是没有解决。 请帮助我。谢谢。
答案 0 :(得分:-1)
当您的ZWORecyclerListAdapter
扩展了WORecyclerListAdapter
并扩展了RecyclerView.Adapter<WORecyclerListAdapter.ViewHolder>
时,您的onBindViewHolder
方法的第二个参数必须是WORecyclerListAdapter.ViewHolder
。而且您使用的是ZWORecyclerListAdapter
自己的ViewHolder
,它将无法正常工作。
您可能想创建一个通用的ViewHolder
,这对两个适配器都适用。