La visibilité des vues de bouton est censée changer onClick, mais lorsque la vue est recyclée, la vue affichée est nulle. Semble être lorsque l'état de la visibilité de l'élément suivant est différent de sa précédente dans la liste. Voici Java pertinent:enfant dans l'élément de liste listview devient null p.e. lorsque la vue est recyclée
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();
Ci-dessous est lorsque NPE lance en essayant de définirVisibility !! Cela ne semble se produire que lorsque la vue linéaire du bouton "pendingRequest1" est dans un état différent de celui de la vue précédente qui est remplie. S'il vous plaît ... un aperçu!
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;
}
Résolu! .. J'ai essayé de surveiller le viewType actif par le bool "hostListItemView" mais cela n'a pas changé lorsque les vues ont été recyclées! Utilisé getItemViewType et qui a parfaitement fonctionné! Merci – sleethma