버튼보기 가시성은 onClick을 변경해야하지만보기를 재활용하면보기가 null이됩니다. 다음 항목 표시 상태가 이전 목록과 다른 경우입니다. Java 관련성이 있습니다 :listview 목록 항목의 자식이 null이됩니다. 보기를 재활용 할 때
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();
다음은 설정하려고 시도 할 때 NPE를 던졌습니다! "pendingRequest1"단추 선형 레이아웃보기가 채워진 앞선보기와 다른 상태에있는 경우에만 발생합니다. 제발 ... 통찰력 좀!
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;
}
가 해결! .. 내가 부울 "hostListItemView"하지만 전망 재활용 때 변경하지 않았다하여 활성 viewType을 모니터링하는 노력! 사용 된 getItemViewType과 완벽하게 작동했습니다! 감사 – sleethma