2017-08-23 1 views
0

Jusqu'à maintenant, je me sers ViewHolders pour RecyclerView sFaut-il implémenter le pattern ViewHolder dans une activité Android?

Je me demandais est-il exact de l'utiliser pour une activité?

Ce que je fais jusqu'à est maintenant dans la méthode OnCreate d'une activité que j'appelle toujours une méthode appelée assign_views qui ressemble à ceci:

//instance variables 
TextView _text_view_1; 
TextView _text_view_2; 
//etc 


void assing_views(boolean assign){ 
    _text_view_1 = assign ? (TextView)findViewById(R.id.text_view_1) : null; 
    _text_view_2 = assign ? (TextView)findViewById(R.id.text_view_2) : null; 
} 

et dans la méthode OnDestroy d'une activité que j'appelle assign_views(false)

donc y aurait-il un avantage à me changer quelque chose comme ceci:

private ActivityViewHolder get_holder(){ 
    return (ActivityViewHolder)getRootView().getTag(); 
} 


void assign_views(boolean assign) { 
    if (assign && get_holder() == null) { 
     getRootView().setTag(new ActivityViewHolder()); 
     get_holder().text_view_1 = (TextView)findViewById(R.id.text_view_1); 
     get_holder().text_view_2 = (TextView)findViewById(R.id.text_view_2); 
    } else if (!assign){ 
    getRootView().setTag(null); 
    } 
} 


static class ActivityViewHolder { 
    TextView text_view_1; 
    TextView text_view_2; 
} 

puis remplacer toutes mes références de _text_view_1 à get_holder().text_view_1

Merci d'avance pour toute aide que vous pouvez fournir

Répondre

0

onDestoy() est appelée lorsque l'activité est la finition ou va être recréée, en raison de la rotation d'écran ou autre config changements. Probablement, certaines dimensions vont changer, par exemple la hauteur de ActionBar est différente pour le paysage et le portrait, ou un autre fichier de disposition sera utilisé pour la nouvelle orientation.
Si vous souhaitez stocker votre vue sans la recréer, vous pouvez gérer manuellement la rotation de l'écran. C'est une mauvaise pratique, et il n'y a pas tellement de cas où vous devriez vraiment l'utiliser. Il suffit de suivre les étapes suivantes:

  1. Dans votre manifeste ajouter
    <activity android:name=".MyActivity" android:label="@string/title_my_activity" android:configChanges="orientation|screenSize|keyboardHidden" />
  2. Remplacer onConfigurationChanged() dans votre activité pour gérer les changements.