当前位置:  开发笔记 > Android > 正文

RecyclerView getChildAt(position)返回null

如何解决《RecyclerViewgetChildAt(position)返回null》经验,为你挑选了1个好方法。



1> Michael Spit..:

问题是像列表视图一样的recyclelerView有多少子视图(项目)取决于你的屏幕大小,而不是你有多少项目.它会阻止应用程序出现OOM异常.例如,如果您有1M项,那么,从您的逻辑来看,Recycler视图必须创建1M子视图,这很糟糕.您可以在此处阅读有关列表视图的更多信息(回收站视图以相同方式工作)

因此,在您的情况下,onClick您不需要查找视图并进行更改.您需要更改一些所谓的"设置"并写入notifyDataSetChangednotifyItemChanged更多优化.

我也检查了你的代码,我求你了.请,请删除此覆盖功能:

@Override
public int getItemViewType(int position) {
    return position;
}

您对所有项目使用相同的持有者,因此您的回收站视图中只有一种类型的视图.以您告知回收站视图的方式覆盖此方法,每个项目使用不同的布局,这会降低性能.

所以,根据你的问题,你将有某种形式:

reView.addOnItemTouchListener(new RecyclerItemClickListener(MainActivity.this, reView, new RecyclerItemClickListener.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        Log.e("Item Pos", "" + position);
        Log.e("Item Rv", "" + reView.getChildCount());
        Log.e("Child Adapter", "" + reView.getAdapter().getItemCount());

        if (!adapter.isChecked(position)) {
            adapter.setChecked(position);
        }
    }

    @Override
    public void onLongItemClick(View view, int position) {

    }
}));

在适配器中:

private int checkedPosition = -1;

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    RvModel rvModel = rvModels.get(position);
    holder.txtText.setText(rvModel.getTitle());

    if (position == checkedPosition) {
        txtText.setBackgroundColor(Color.BLUE);
        txtText.setTextColor(Color.WHITE);
    } else {
        txtText.setBackgroundColor(Color.WHITE);
        txtText.setTextColor(Color.BLUE);
    }
}

public boolean isChecked(int position) {
    return checkedPosition == position;
}

public void setChecked(int position) {
    int prevChecked = checkedPosition;
    checkedPosition = position;

    if (prevChecked != -1) {
        notifyItemChanged(prevChecked);
    }
    notifyItemChanged(checkedPosition)
}

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有