当我尝试将字符串设置为McOntentView为我的视图持有人的值时,Android Studio说我正在创建一个null对象参考:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mContentView.setText(mValues.get(position).getName());
}
错误消息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gatech.astroworld.spacetrader, PID: 10155
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.gatech.astroworld.spacetrader.views.market.Buy_Item_RecyclerAdapter.onBindViewHolder(Buy_Item_RecyclerAdapter.java:49)
基本上,我的问题是:我如何实例化mcontentview,因此我可以避免零对象引用?
这是视图持有人类:
public class ViewHolder extends RecyclerView.ViewHolder {
public View mView;
public TextView mIdView;
public TextView mContentView;
public Store.MarketGood mItem;
public int textCount = 0;
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = view.findViewById(R.id.item_number);
mContentView = view.findViewById(R.id.content);
final TextView itemCountText = view.findViewById(R.id.countText);
final TextView showName = view.findViewById(R.id.itemName);
Button plusButton = mView.findViewById(R.id.plusButton);
Button minusButton = mView.findViewById(R.id.minusButton);
plusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//showName.setText(mItem.getName());
store.incrementCountBuy(mItem);
itemCountText.setText(String.valueOf(mItem.getCount()));
}
});
minusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
store.decrementCountBuy(mItem);
itemCountText.setText(String.valueOf(mItem.getCount()));
}
});
}
请参见我的适配器作为示例:
public class AdapterAssetList extends RecyclerView.Adapter<AdapterAssetList.ViewHolderAssets> {
private final LayoutInflater layoutInflater;
OnItemClickListener itemClickListener;
Context context;
private ImageLoader imageLoader;
public AdapterAssetList(Context mContext, ArrayList<Asset> assetList) {
this.context = mContext;
this.assetList = assetList;
layoutInflater = LayoutInflater.from(context);
}
@NonNull
@Override
public ViewHolderAssets onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = layoutInflater.inflate(R.layout.dashboard_asset_childs, viewGroup, false);
ViewHolderAssets viewHolderAssets = new ViewHolderAssets(view);
return viewHolderAssets;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolderAssets holder, int position) {
imageLoader = VolleySingleton.getInstance(context).getImageLoader();
holder.assetName.setText(assetList.get(position).getName());
holder.assetValue.setText(withSuffix((long) assetList.get(position).getValue()));
}
@Override
public int getItemCount() {
if (assetList == null)
assetList = new ArrayList<>();
return assetList.size();
}
public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.itemClickListener = mItemClickListener;
}
public void removeAt(int position) {
//subsPlanList.remove(position);
notifyItemRemoved(position);
//notifyItemRangeChanged(position, subsPlanList.size());
}
public interface OnItemClickListener {
public void onItemClick(View view, int position, String id);
}
public class ViewHolderAssets extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView assetName;
TextView assetValue;
public ViewHolderAssets(@NonNull View itemView) {
super(itemView);
assetName = itemView.findViewById(R.id.txt_asset_name);
assetValue = itemView.findViewById(R.id.txt_asset_value);
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, getAdapterPosition(), "copyright");
}
}
}
注意:您的视图持有人应该是适配器的内部类别。
您可以为您的视图持有人创建一个内部类,并扩展RecyClerview.ViewHolder。然后,在您的新Viewholder类中添加类似于 binddata 的方法,并添加用户实现。完成此操作后,从OnBindViewHolder方法调用BindData。
eg:https://github.com/kartikkumargujarati/android-rr/blob/blob/blob/blob/bbbaa0064777377777777777614f4291760ff4291760fff324ff324df324df324dfb//p>