I am using a recyclerView inside my navigation drawer and I am using this library Twoway-view to get click and selection support.
It works perfectly and I can change the color of the text and the icons without problems inside OnClick method for each position:
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(); } }); The problem is that I want to access to the first item like in that method, but before it (to set the first item selected, with different color, etc).
But I get a crash (null reference) when I try to get the first item outside OnClick method:
ImageView imageViewDrawerIcon = (ImageView) recyclerViewDrawer.getChildAt(0).findViewById(R.id.imageViewDrawerIcon); All code:
// 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, 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(); } });