0
저는 ExpandableListAdapter를 구현하고 있습니다. ListView에 대한 CursorAdapter에서 bindView와 동일한 것이 있으면 궁금합니다. 그렇게하면 뷰를 부 풀릴 것을 최소화 할 수 있고 목록 스크롤시 뷰에 데이터 만로드 할 수 있습니다.ExpandableListAdapter에 대한 bindView와 동일
public class ContactNumberListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private LayoutInflater mInflater;
private final List<PhoneNumberData> mGroups;
public ContactNumberListAdapter(Context context, List<PhoneNumberData> groups, SingleContactDelegate delegate) {
mContext = context;
mInflater = LayoutInflater.from(context);
mGroups = groups;
}
@Override
public Object getGroup(int groupPosition) {
return mGroups.get(groupPosition);
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
CollapsedViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.single_contact_item_collapsed_layout, null);
viewHolder = new CollapsedViewHolder();
viewHolder.typeView = (TextView) convertView.findViewById(R.id.contact_item_type_collapsed);
viewHolder.numberView = (TextView) convertView.findViewById(R.id.contact_item_number_collapsed);
viewHolder.dropdownButton = (ImageView) convertView.findViewById(R.id.contact_item_button_collapsed);
convertView.setTag(viewHolder);
} else {
viewHolder = (CollapsedViewHolder) convertView.getTag();
}
// ---------- As you can see from this block -------------------
// I load the data and assign it to view after loading the view - all in one place
// ---------- Better implementation wanted ---------------------
PhoneNumberData data = (PhoneNumberData) getGroup(groupPosition);
viewHolder.typeView.setText(data.getPhoneType());
viewHolder.numberView.setText(data.getPhoneNumber());
viewHolder.dropdownButton.setPressed(isExpanded);
return convertView;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final ExpandedViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.single_contact_item_expanded_layout, null);
viewHolder = new ExpandedViewHolder();
viewHolder.callButton = (ImageView) convertView.findViewById(R.id.contact_item_call_button);
viewHolder.favorButton = (ImageView) convertView.findViewById(R.id.contact_item_favorite_button);
convertView.setTag(viewHolder);
} else {
viewHolder = (ExpandedViewHolder) convertView.getTag();
}
final PhoneNumberData data = (PhoneNumberData) getGroup(groupPosition);
if (viewHolder.callButton != null) {
viewHolder.callButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
viewHolder.callButton.setPressed(true);
if (mDelegate != null) {
mDelegate.onCallButtonClicked(data.getPhoneNumber());
}
break;
case MotionEvent.ACTION_UP:
viewHolder.callButton.setPressed(false);
break;
default:
break;
}
return true;
}
});
}
if (viewHolder.favorButton != null) {
viewHolder.favorButton.setSelected(data.isFavorite());
viewHolder.favorButton.setOnClickListener(new View.OnClickListener() {
boolean isFavorite = data.isFavorite();
@Override
public void onClick(View v) {
isFavorite = !isFavorite;
viewHolder.favorButton.setSelected(isFavorite);
if (mDelegate != null) {
mDelegate.onFavoriteButtonClicked(data.getPhoneNumber(), isFavorite);
}
}
});
}
return convertView;
}
아하! 당신은 내 코드 hahah에 대해 기분을 좋게했다. 감사! – xialin