Button views visibility is supposed to change onClick, but when view recycled, the said view comes up null. Seems to be when state of following item visibility is different than its previous in list. Here is relevant Java:
class OpenChavrutaAdapter extends ArrayAdapter<HostSessionData> {
private Context mContext;
private static final String LOG_TAG =
OpenChavrutaAdapter.class.getSimpleName();
HostSessionData hostSessionItemData;
public OpenChavrutaAdapter(Context context, ArrayList<HostSessionData>
hostSessionArrayList) {
super(context, 0, hostSessionArrayList);
this.mContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//get data item for position
final ViewHolder viewHolder;
View listItemView = convertView;
Boolean hostListItemView = true;
String userId = UserDetails.getmUserId();
final HostSessionData hostLookup = getItem(position);
final String hostId = hostLookup.getmHostId();
if (listItemView == null) {
viewHolder = new ViewHolder();
//sets correct listItemView based on Caller's Context
if (hostId.equals(userId) && mContext == mainActivityContext) {
hostListItemView = true;
listItemView =
LayoutInflater.from(
getContext()).inflate(R.layout.hosting_chavrutas_list_item, parent, false);
} else {
//adapter called from HostSelect.class
listItemView =
LayoutInflater.from(getContext()).inflate(R.layout.open_host_list_item,
parent, false);
hostListItemView = false;
}
//cache the viewHoslder object inside the fresh view
listItemView.setTag(viewHolder);
} else {
//view is already been populated
hostListItemView = false;
viewHolder = (ViewHolder) listItemView.getTag();
}
final HostSessionData hostSessionDatas = getItem(position);
if (hostListItemView) {
String idOfConfirmedUser = hostLookup.getmConfirmed();
String request1NullCheck = hostLookup.getMchavrutaRequest1();
String request2NullCheck = hostLookup.getMchavrutaRequest2();
String request3NullCheck = hostLookup.getMchavrutaRequest3();
Below is when throws NPE when trying to setVisibility!! Seems to only happen when "pendingRequest1" Button linear layout view is in a different state than the preceeding view that is populated. Please...some insight!
if (request1NullCheck != null &&
hostLookup.getMchavrutaRequest1().length() > 5) {
String chavrutaRequestIdOne = hostLookup.getMchavrutaRequest1();
viewHolder.pendingRequest_1.setVisibility(View.VISIBLE);
if( idOfConfirmedUser.equals(chavrutaRequestIdOne)){
viewHolder.confirmRequest_1.setBackgroundColor(Color.parseColor("#10ef2e"));
}
}else{viewHolder.pendingRequest_1.setVisibility(View.GONE);}
notifyDataSetChanged();
}
return listItemView;
}