【问题标题】:RecyclerView GridLayoutManager items shifting positions randomlyRecyclerView GridLayoutManager 项目随机移动位置
【发布时间】:2017-05-25 10:21:39
【问题描述】:

在 RecyclerView 中使用网格布局,我观察到每当我在屏幕上看到大约 4-5 个项目时,这些项目会改变位置,我已经实现了一个 onclick,以便它可以进入另一个页面

public interface ItemClickCallback {
    void onItemClick(int p, String id);

}

public void setItemClickCallback(final ItemClickCallback itemClickCallback) {
    this.itemClickCallback = itemClickCallback;

}

public nAdapter(RealmResults<Nitem> listData, Context c) {
    inflater = LayoutInflater.from(c);
    this.listData = listData;
}


@Override
public nHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.n_item, parent, false);
    return new nHolder(view);
}

@Override
public void onBindViewHolder(nAdapter.nHolder holder, final int position) {
    final Nitem item = (Nitem) listData.get(position);
    holder.title.setPadding(7,7,7,7);
    if(holder.title.toString().isEmpty()) {
        holder.title.setText(item.getNotes());
    }
        holder.container.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            itemClickCallback.onItemClick(position,item.getId());
        }
    });

}

【问题讨论】:

    标签: android android-recyclerview gridlayoutmanager


    【解决方案1】:

    RecyclerView 中的视图被重用。

    这意味着当您向上或向下滚动列表时,不是创建全新的视图,而是重复使用以前创建的视图。

    隐含地,它强制您一次又一次地更新视图内容(不仅在您期望它为空时)。

    您可能对错位的标题有疑问?发生这种情况是因为您只设置标题,当它为空时(仅适用于少数尚未缓存的视图)。

    只需删除if 条件就可以了。

    @Override
    public void onBindViewHolder(nAdapter.nHolder holder, final int position) {
        final Nitem item = (Nitem) listData.get(position);
        holder.title.setPadding(7,7,7,7);
        // Always update view's data.
        holder.title.setText(item.getNotes());
        holder.container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                itemClickCallback.onItemClick(position,item.getId());
            }
        });
    }
    

    【讨论】:

    • 删除了 if 语句,没有任何改变,我使用领域作为其数据库是否有帮助
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2019-10-27
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多