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; 
    } 

답변

0
/** 
* @see android.widget.ListAdapter#getView(int, View, ViewGroup) 
*/ 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (!mDataValid) { 
     throw new IllegalStateException("this should only be called when the cursor is valid"); 
    } 
    if (!mCursor.moveToPosition(position)) { 
     throw new IllegalStateException("couldn't move cursor to position " + position); 
    } 
    View v; 
    if (convertView == null) { 
     v = newView(mContext, mCursor, parent); 
    } else { 
     v = convertView; 
    } 
    bindView(v, mContext, mCursor); 
    return v; 
} 

이 코드는 CursorAdapter에 해당 ... 할 CursorAdapter 것입니다 :

다음은 내 현재 코드 하이라이트입니다. + _ +

+0

아하! 당신은 내 코드 hahah에 대해 기분을 좋게했다. 감사! – xialin