首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适配器不更新附加视图的条件是什么?

适配器不更新附加视图的条件是什么?
EN

Stack Overflow用户
提问于 2015-09-01 19:46:08
回答 3查看 402关注 0票数 2

我使用这个库创建可刷卡:https://github.com/Diolor/Swipecards

使刷卡可以控制的视图被连接到适配器和它从中提取的源。

在我的实现中,每一张卡都有一个按钮,当点击它时,源数组中的某些内容会发生变化,为此我想刷新整个卡片列表。我在关联适配器上调用notifyDataSetChanged(),但是在适配器中从未调用getView()来查看任何更新。

奇怪的是,同一个适配器与ListView完美地工作在一起

在适配器的一侧或视图本身中是否有任何特定的需求,这是notifyDataSetChanged正常运行所必需的?

我的代码:

(请忽略ViewHolder模式的缺失和适配器内是否存在单击接收器。当关键的功能不起作用时,代码质量是我现在最不关心的事情)

适配器(使用阵列适配器)

代码语言:javascript
复制
public class TourCardAdapter extends ArrayAdapter<TourCardBean> implements View.OnClickListener {

    Context context;
    ToursFragment.ToursControlsClickListener clickListener;

    public TourCardAdapter(Context context, ArrayList<TourCardBean> tourCardsArr, ToursFragment.ToursControlsClickListener clickListener) {
        super(context, 0, tourCardsArr);
        this.context = context;
        this.clickListener = clickListener;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        ViewHolder viewHolder;
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        TourCardBean tourCard = getItem(position);

        rowView = inflater.inflate(R.layout.card_tour, parent, false);


        viewHolder = new ViewHolder();

        viewHolder.title = (TextView) rowView
                .findViewById(R.id.title);
        viewHolder.detail = (TextView) rowView
                .findViewById(R.id.detail);
        viewHolder.likeCount = (TextView) rowView
                .findViewById(R.id.likeCount);
        viewHolder.image = (ImageView) rowView
                .findViewById(R.id.cardLocationImage);
        viewHolder.likeButton = (ImageView) rowView
                .findViewById(R.id.cardLikeImage);
        viewHolder.shareButton = (ImageView) rowView
                .findViewById(R.id.cardShareImage);

        viewHolder.likeButton.setOnClickListener(this);
        viewHolder.shareButton.setOnClickListener(this);

        viewHolder.title.setText(tourCard.getTitle());
        viewHolder.detail.setText(tourCard.getDetails());
        viewHolder.likeCount.setText("" + tourCard.getLikeCount());
        viewHolder.likeButton.setTag(tourCard.getId());
        viewHolder.shareButton.setTag(tourCard.getId());

        return rowView;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.cardLikeImage:
                clickListener.onLikeClick((int) v.getTag());
                break;
            case R.id.cardShareImage:
                clickListener.onShareClick((int) v.getTag());
                break;
        }
    }


    /**
     * View Holder for ListView
     *
     * @author Aman Alam
     */
    class ViewHolder {
        public ImageView image;
        public ImageView likeButton;
        public ImageView shareButton;
        public TextView title;
        public TextView detail;
        public TextView likeCount;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-02 15:14:35

基于一些针对滑动库记录的问题,它可能存在一些bug,阻止它更新notifyDataSetChanged()上的视图。这一个有几个可能适合您的解决方案。具体来说,flingContainer.removeAllViewsInLayout().

票数 1
EN

Stack Overflow用户

发布于 2015-09-01 20:33:20

如果它适用于ListView,那么适配器不应该是问题所在。

SwipeFlingAdapterView (或多或少)直接基于根本不调用getView()AdapterView。因此,当数据集被更改时,调用getView()是它的责任。代码的相关部分似乎是,可能会被单击事件阻止:

代码语言:javascript
复制
if (this.flingCardListener.isTouching()) {
    PointF lastPoint = this.flingCardListener.getLastPoint();
    if (this.mLastTouchPoint == null || !this.mLastTouchPoint.equals(lastPoint)) {
        this.mLastTouchPoint = lastPoint;
        removeViewsInLayout(0, LAST_OBJECT_IN_STACK);
        layoutChildren(1, adapterCount);
    }
}

总的来说,SwipeFlingAdapterView似乎根本没有为数据集更改事件做好准备。

票数 2
EN

Stack Overflow用户

发布于 2015-09-01 20:11:33

库可能非常有用,但我认为使用google提供的支持库是明智的。

一旦发布了材料设计的最新更新,您就可以从中获益。

您可以在gradle文件中声明。这个;

代码语言:javascript
复制
compile 'com.android.support:design:22.2.0'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32339755

复制
相关文章

相似问题

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