Recyclerview, je ne peux pas obtenir de point de vue avec getChildAt(position). Nulle référence d'objet

Je suis à l'aide d'un recyclerView à l'intérieur de ma navigation tiroir et je suis en utilisant cette bibliothèque Twoway-vue pour obtenir de cliquer et de soutien à la sélection.

Il fonctionne parfaitement et je peux changer la couleur du texte et les icônes sans problèmes à l'intérieur OnClick méthode pour chaque 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();
}
});

Le problème est que je veux accéder au premier élément, comme dans la méthode, mais avant elle (pour définir le premier élément sélectionné, avec des couleurs différentes, etc).

Mais j'ai un crash (référence nulle) lorsque j'essaie d'obtenir le premier point à l'extérieur OnClick méthode:

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

Tous les 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();
}
});

OriginalL'auteur JavierSegoviaCordoba | 2015-02-03