Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – Recyclerview,我无法通过getChildAt(位置)获取项目视图.空对象引用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在导航抽屉里面使用了recyclerView,我使用这个Twoway-view来获得点击和选择支持.

它工作得很好,我可以在每个位置的OnClick方法中更改文本和图标的颜色而没有问题:

itemClickSupport.setOnItemClickListener(new ItemClickSupport.onItemClickListener() {
        @Override
        public void onItemClick(RecyclerView parent,View view,int position,long id) {
            TypedValue typedValue = new TypedValue();
            MainActivity.this.getTheme().resolveAttribute(R.attr.colOraccent,typedValue,truE);
            final int color = typedValue.data;

            //TODO Icon and text colors

            for (int i = 0; i < drawertitles.length; i++){
                if (i == position){
                    ImageView imageViewDrawerIcon = (ImageView) recyclerViewDrawer.getChildAt(i).findViewById(R.id.imageViewDrawerIcon);
                    TextView textViewDrawertitle = (TextView) recyclerViewDrawer.getChildAt(i).findViewById(R.id.textViewDrawerItemtitlE);
                    imageViewDrawerIcon.setColorFilter(color);
                    if(Build.VERSION.SDK_INT > 15){
                        imageViewDrawerIcon.setImageAlpha(255);
                    }else{
                        imageViewDrawerIcon.setAlpha(255);
                    }
                    textViewDrawertitle.setTextColor(color);
                    RelativeLayout relativeLayoutDrawerItem = (RelativeLayout) recyclerViewDrawer.getChildAt(i).findViewById(R.id.relativeLayoutDrawerItem);
                    relativeLayoutDrawerItem.setFocusableInTouchMode(true);
                }else{
                    ImageView imageViewDrawerIcon = (ImageView) recyclerViewDrawer.getChildAt(i).findViewById(R.id.imageViewDrawerIcon);
                    TextView textViewDrawertitle = (TextView) recyclerViewDrawer.getChildAt(i).findViewById(R.id.textViewDrawerItemtitlE);
                    imageViewDrawerIcon.setColorFilter(getresources().getColor(R.color.md_text));
                    if(Build.VERSION.SDK_INT > 15){
                        imageViewDrawerIcon.setImageAlpha(138);
                    }else{
                        imageViewDrawerIcon.setAlpha(138);
                    }
                    textViewDrawertitle.setTextColor(getresources().getColor(R.color.md_text));
                    RelativeLayout relativeLayoutDrawerItem = (RelativeLayout) recyclerViewDrawer.getChildAt(i).findViewById(R.id.relativeLayoutDrawerItem);
                    relativeLayoutDrawerItem.setFocusableInTouchMode(false);
                }
            }

            //TODO Fragments (closedrawers before setfragment)
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    // Do something after some time

                }
            },250);
            mDrawerLayout.closeDrawers();
        }
    });

问题是我想要访问该方法中的第一个项目,但在它之前(设置选择的第一个项目,使用不同的颜色等).

但是当我尝试获取OnClick方法之外的第一个项目时,我得到了崩溃(null引用):

ImageView imageViewDrawerIcon = (ImageView) recyclerViewDrawer.getChildAt(0).findViewById(R.id.imageViewDrawerIcon);

所有代码

// Setup RecyclerView inside drawer
    recyclerViewDrawer = (RecyclerView) findViewById(R.id.recyclerViewDrawer);
    recyclerViewDrawer.setHasFixedSize(true);
    recyclerViewDrawer.setLayoutManager(new linearlayoutmanager(MainActivity.this));

    ArrayList<DrawerItem> drawerItems = new ArrayList<>();
    final String[] drawertitles = getresources().getStringArray(R.array.drawer);
    final TypedArray drawerIcons = getresources().obtainTypedArray(R.array.drawerIcons);
    for (int i = 0; i < drawertitles.length; i++) {
        drawerItems.add(new DrawerItem(drawertitles[i],drawerIcons.getDrawable(i)));
    }
    drawerIcons.recycle();
    adapterDrawer = new DrawerAdapter(drawerItems);
    recyclerViewDrawer.setAdapter(adapterDrawer);

    // Here is the problem
    ImageView imageViewDrawerIcon2 = (ImageView) recyclerViewDrawer.getChildAt(0).findViewById(R.id.imageViewDrawerIcon);

    // RecyclerView item listener.
    ItemClickSupport itemClickSupport = ItemClickSupport.addTo(recyclerViewDrawer);
    itemClickSupport.setOnItemClickListener(new ItemClickSupport.onItemClickListener() {
        @Override
        public void onItemClick(RecyclerView parent,250);
            mDrawerLayout.closeDrawers();
        }
    });

解决方法

在我的情况下,它的工作就像一个魅力
View viewItem = recycleView.getLayoutManager().findViewByPosition(position);
    View icon = viewItem.findViewById(R.id.view);

大佬总结

以上是大佬教程为你收集整理的android – Recyclerview,我无法通过getChildAt(位置)获取项目视图.空对象引用全部内容,希望文章能够帮你解决android – Recyclerview,我无法通过getChildAt(位置)获取项目视图.空对象引用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。