首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bindView等价于ExpandableListAdapter

bindView等价于ExpandableListAdapter
EN

Stack Overflow用户
提问于 2014-09-16 02:56:22
回答 1查看 183关注 0票数 0

我正在实现ExpandableListAdapter,我想知道在CursorAdapter中是否有任何与CursorAdapter中的ListView等价的东西?这样,我可以最小化对膨胀视图的调用,并且只在列表滚动时将数据加载到视图中。

下面是我当前代码的突出显示:

代码语言:javascript
复制
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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-16 04:06:59

代码语言:javascript
复制
    /**
 * @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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25859988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档